我有这样的事情:列表<object>内存开销
List<object> res = new List<object>();
...
while (...)
{
byte[] val = //get new byte[4]
res.Add(val); //if this is commented memory usage goes from 2Gb to 180Mb
}
return res;
现在val
总是字节[4]和有大约3700元。所以我认为res
应该在37 * 10^6 * 4字节= 148 MB左右,但真正的内存使用量在2GB左右。如果我评论res.Add(val);
,则内存使用率为100 MB。
那么内存去哪里?
EDIT
EDIT2
好的,使用uint而不是字节[4] 和List<uint>()
而不是List<object>
使内存大约300 MB。
如何计算内存使用量?任务管理器? – HimBromBeere
对于3700万个对象,2GB的容量降低到每个盒装值54个字节,包括运行时间(GC)的簿记和一般.NET的开销,并且您的程序不小,因为您指示100 MB的占用空间当它什么都不做时。你为什么认为'List'是相关的?数组是否显示相同的行为?你想解决什么问题? –
CodeCaster
@HimBromBeere使用VS调试器,查看屏幕截图 – ren