【发布时间】:2013-06-07 10:36:09
【问题描述】:
我已经编写了以下代码来检查是否有足够的内存,
while (true)
{
try
{
// Check for available memory.
memFailPoint = new MemoryFailPoint(250);
break;
}
catch (InsufficientMemoryException ex)
{
if (memFailPoint != null)
{
memFailPoint.Dispose();
}
Thread.Sleep(waitSecond * 1000);
}
}
我在 Windows 7 64 位机器上的控制台应用程序中运行上述内容。
此方法每 10 秒调用 4 次。
最初它工作正常,但在 2-3 小时后,总是会抛出一个 InsufficientMemoryException。我检查了可用内存,它显示超过 1 GB。
我尝试了很多,但我无法找到发生这种情况的原因。
以下是堆栈跟踪:
at System.Runtime.MemoryFailPoint..ctor(Int32 sizeInMegabytes)
at SocketListner.AcceptConnection(IAsyncResult res) in H:\Projects\SocketListner.cs:line 308
没有内部异常。
【问题讨论】:
-
你还在做什么来得到这个错误?您可以发布堆栈跟踪吗?
-
我已添加堆栈跟踪,请重新访问问题
-
“我检查了可用内存”如何?即使有 1GB 的空闲空间,它也可能过于分散而无法分配 250Meg。内存中需要有 250M 的连续可用空间才能成功。
-
剩下多少物理内存甚至虚拟内存都没有关系。您的进程使用了多少内存?
-
我检查了资源监视器
标签: c# memory-management memory-leaks out-of-memory