2010-03-04 16 views
3

有一些关于 How to get object size in memory ? 的文章,但它们没有解释如何获取内存中对象的大小。在内存中获取DataTable或ArrayList的大小

当我使用:

System.Runtime.InteropServices.Marshal.SizeOf(arrayListObject)

我得到错误:

Type 'System.Collections.ArrayList' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.

我也无法得到可用的存储量,becouse我想执行上与Web应用程序这个计算很多线程,所以需要知道具体对象需要多少内存。

+1

除非你仍然停留在.NET 1.1,否则不应该使用'ArrayList'。如果您需要包含任何对象的列表,请使用'列表'。 – 2010-03-04 12:03:46

+0

问题不是关于使用对象的方式,现在我正在使用DataTable – 2010-03-09 05:19:39

回答

1

如果你想知道这可能是因为可能的优化:使用内存分析器。

+0

不,我不想知道它是为了优化,我想知道我的DataTable何时增长太多,才能激发事件。 – 2010-03-09 05:20:31

2

你想知道在代码管理对象的内存大小 - 根据this博客条目,这是不可能的。

您需要使用内存分析器来执行此操作(如Ants profiler)。

+0

我不想使用分析器,我需要知道大小以触发警报/事件或某事 – 2010-03-09 05:21:13

0

那么如何序列化DataTable,然后检查其长度?

System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
System.IO.MemoryStream stream = new System.IO.MemoryStream(); 
formatter.Serialize(stream, YourDataTable); 
long length = stream.Length;