"超出虚拟内存"的崩溃

Arn*_* F. 3 .net c# memory-management

我正在维护一个现有的应用程序,并且在某些情况下运行时遇到了一个错误(很容易重现),其中app失败并显示消息:

  • 标题:"Windows - 虚拟内存"
  • 内容:"Windows虚拟内存不足......"

问题是:我需要先检查一下?这个消息什么时候发生?为什么?

在C#中存储在这个虚拟内存中的原因是什么?

Jer*_*Gee 11

听起来你有某种记忆或资源泄漏.是时候破解剖析器,看看消耗的资源或内存是什么.

好的个人资料包括

http://www.red-gate.com/products/dotnet-development/ants-performance-profiler

http://memprofiler.com/

- 这将附加到您的运行过程,看看哪些是失控的.

通常,这种问题可能是由于实现IDisposable没有通过调用处理的对象引起的Dispose().这些对象使用的内存和资源不受.NET垃圾收集器管理,因此(与常规.NET对象不同)系统不会自动对其进行整理.

分析器通常会告诉您这是否是一个问题.

例如,还有其他情况会发生这种情况

  • 分配非常大的内存块,例如40Gb阵列
  • 没有机会正确进行垃圾收集的负载很重的系统可能会超出其虚拟内存分配.

同样,分析器会告诉您问题可能存在的位置.