首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >崩溃与“脱离虚拟内存”

崩溃与“脱离虚拟内存”
EN

Stack Overflow用户
提问于 2011-11-14 13:15:55
回答 2查看 1.1K关注 0票数 3

我正在维护一个现有的应用程序,并且在某些条件下(很容易复制)运行时遇到了一个bug,其中应用程序在消息中失败:

  • 标题:"Windows -耗尽虚拟内存“
  • 内容:"Windows的虚拟内存不足.“

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

在C#中这个虚拟内存中存储了什么,为什么是内存不足?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-14 13:18:10

听起来你好像有某种记忆或资源泄露。是时候打开分析器,看看是什么消耗了资源或内存。

良好的剖析器包括

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

http://memprofiler.com/

-这会附加到你的运行过程中,看看什么是失控的。

通常,这种问题可能是由于实现IDisposable的对象没有通过对Dispose()的调用而被释放造成的。这些对象使用的内存和资源不是由.NET垃圾收集器管理的,因此(与常规的.NET对象不同)它们不会被系统自动整理。

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

例如,还有其他可能发生这种情况的情况。

  • 分配非常大的内存块,例如40 of数组
  • 负载很重的系统如果没有机会正确回收垃圾,可能会超出它们的虚拟内存分配。

再一次,分析器会告诉你问题可能发生在哪里。

票数 11
EN

Stack Overflow用户

发布于 2011-11-14 13:17:51

Windows使用虚拟存储器进行内存管理,但是内存是虚拟的并不是问题所在。这表明您的应用程序分配了大量内存--比系统上可用的内存还多。

有些事情可能会导致这种情况:

  • 您正在使用无法释放内存的非托管代码。
  • 您分配巨大的数据块(例如,不正确分配2GB数据的数组大小的动态计算)。
  • 对缓冲区的引用比需要的时间更长,这会阻止垃圾收集器回收内存。

如果不了解更多关于应用程序的信息,就不可能给出更详细的提示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档