C#/ .NET:字典内存使用情况

cor*_*ore 6 .net c# dictionary

我有一个包含大量数据的通用词典.当Dictionary的大小开始占用太多内存时,我想开始删除项目(我知道如何确定哪些项目).

我的程序监视此词典使用的RAM的最佳方法是什么?

字典中的每个项目都是可变大小.

Mit*_*eat 5

计算每个项目的大小并乘以 Dictionary.Count

这里显示一种方法:

确定内存中对象使用大小的近似方法可以通过在创建对象之前和之后检查总内存来完成.在以下示例中,假设您有一个名为foo的类.

long StopBytes = 0;
foo myFoo;

long StartBytes = System.GC.GetTotalMemory(true);
myFoo = new foo();
StopBytes = System.GC.GetTotalMemory(true);
GC.KeepAlive(myFoo); // This ensures a reference to object keeps object in memory

MessageBox.Show("Size is " + ((long)(StopBytes - StartBytes)).ToString());
Run Code Online (Sandbox Code Playgroud)

C#有一个'sizeof'运算符,它的工作方式与在C/C++中的运行方式相同,但它返回的是该类型字段的大小.因此,对于引用类型(类,而不是struct),它将始终返回指针的大小(32位系统上的4).请System.Runtime.InteropServices.Marshal.SizeOf()改用.