在内存中获取DataTable或ArrayList的大小

时间:2010-03-04 11:43:24

标签: c# memory

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

当我使用时:

  

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

我收到错误:

  

输入'System.Collections.ArrayList'   不能作为一个无人管理的集合   结构体;没有意义的大小或   可以计算偏移量。

我也无法获得所有可用内存的数量,因为我想在具有大量线程的Web应用程序上执行此计算,因此需要确切知道需要特定对象的内存量。

3 个答案:

答案 0 :(得分:2)

您希望在代码中找出托管对象的内存大小 - 根据this博客条目,这是不可能的。

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

答案 1 :(得分:1)

如果由于可能的优化而想知道这一点:使用内存分析器。

答案 2 :(得分: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;