我的代码:
var list = new LinkedList<int>();
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
while (true)
{
for(int i = 0; i < 1000 * 1000; i++) list.AddLast(0);
Console.WriteLine(ramCounter.NextValue());
}问题:
文档似乎说,我只能将Administrator,作为使用PerformanceCounter,但是我以标准用户的身份运行了应用程序,并且运行起来了。我能依赖这个吗?当大约200 MB的内存仍然存在时,OutOfMemoryException一直是
PerformanceCounter.NextValue()吗?注意,这是我第一次在这台PC上得到。
注:,我为什么要这么做?好吧,我希望我的内存密集型应用程序能检测出5 MB内存的残留情况,并以“内存不足,请关闭其他程序并返回,否则这个程序将失败”警告用户。
发布于 2009-08-25 17:01:53
我不能回答你所有的问题,但我说
2)您使用的是32位Windows还是64位Windows?听起来,您正在运行一个访问3GB(即32位Windows)的大地址感知进程。无论如何,您必须记住,内存是以不同大小的块分配的,而且堆的使用并不是唯一的源。CLR本身有许多结构,每个线程都有一个堆栈等等。在任何情况下,你都不能期望能够使用3GB,
3) BSOD是由驱动程序或内核错误引起的。AFAIK您的应用程序不能导致BSOD,所以这很可能是无关的。
4)如果你使用大量的内存,GC将很难跟上。当用户线程被挂起时,GC的某些部分正在进行中,这将大大降低应用程序的速度。
https://stackoverflow.com/questions/1329421
复制相似问题