Joh*_*nyy 5 c# garbage-collection
在下面的代码段中,我想知道为什么testvectors在函数调用后没有收集.我看到内存使用量高达270Mb,然后永远呆在那里.
此功能直接从Main调用.
private static void increaseMemoryUsage()
{
List<List<float>> testvectors = new List<List<float>>();
int vectorNum = 250 * 250;
Random rand = new Random();
for (int i = 0; i < vectorNum; i++)
{
List<Single> vec = new List<Single>();
for (int j = 0; j < 1000; j++)
{
vec.Add((Single)rand.NextDouble());
}
testvectors.Add(vec);
}
}
Run Code Online (Sandbox Code Playgroud)
不要将垃圾收集与引用计数混淆.运行时决定释放内存,而不是总是在不再引用内存时释放内存.报价:
当满足下列条件之一时,将发生垃圾收集:
系统物理内存较低.
托管堆上已分配对象使用的内存超过可接受的阈值.这意味着托管堆上已超出可接受内存使用量的阈值.在该过程运行时不断调整该阈值.
调用GC.Collect方法.几乎在所有情况下,您都不必调用此方法,因为垃圾收集器会持续运行.此方法主要用于独特的情况和测试.
如果您有兴趣,请阅读此内容:
http://msdn.microsoft.com/en-us/library/0xy59wtx.aspx
GC可以在需要时运行.这可能会晚得多.在最后一次引用消失后,没有义务直接释放一些内存.您的阵列将在下一代Gen2集合中收集.
除非你继续分配内存,否则在函数返回后它可能永远不会运行.
您可以手动触发GC GC.Collect(),但通常不鼓励这样做.
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |