【发布时间】:2010-05-06 19:57:49
【问题描述】:
我有一部分代码在 double 的大数组上运行(至少包含大约 6000 个元素)并执行数百次(通常是 800 次)。
当我使用标准循环时,像这样:
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
}
内存使用量增加了大约 40MB(从循环开始时的 40MB,到结束时的 80MB)。
当我在每次迭代时强制使用垃圾收集器执行时,内存使用量保持在 40MB 的水平(上升并不显着)。
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
GC.Collect()
}
但是执行时间要长3倍! (很重要)
如何强制 C# 使用相同的内存区域而不是分配新的内存区域?
注:someObject类的代码我是有权限的,如果需要,我可以修改。
【问题讨论】:
-
如果可能的话,我想看看你得到数组后如何处理它,以及producesOutput 是如何工作的。
标签: c# memory-management