这是一个可用虚拟内存的图表,以字节为单位,用于我正在进行原型设计的小型应用程序。应用程序在紧密循环中运行,该循环在链表的末尾添加一个整数。如果剩余一定百分比的虚拟内存,则转到循环的开头,否则退出。是什么导致图中这六个位置的虚拟内存突然增加?我的第一个想法是垃圾收集,但是因为我在链接列表中添加了新元素而没有删除任何内容,所以不应该有任何未使用的引用来清理,当然不是那些大量的。最后的跳跃超过了千兆字节的三分之一。这是一个为x86编译但在.NET 4.5下的x64机器上运行的应用程序。很抱歉,如果这是重复的,我不知道该怎么称呼该事件,所以很难搜索它。
编辑:我无法提供确切的代码,但此代码确实展示了我所看到的内容。
public void DoIt()
{
ComputerInfo ci = new ComputerInfo();
double memory = 0;
double count = 0;
for (int i = 0; i < 2; i ++)
{
Console.WriteLine(ci.AvailableVirtualMemory);
try
{
while (true)
{
list.AddFirst(892);
count++;
}
}
catch (OutOfMemoryException)
{
memory = ci.AvailableVirtualMemory;
list.Clear();
list = null;
System.GC.Collect();
list = new LinkedList<int>();
Console.WriteLine(memory);
Console.WriteLine(count);
count = 0;
}
}
}