首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于asp.net应用程序来说,物理内存太大了?

对于asp.net应用程序来说,物理内存太大了?
EN

Stack Overflow用户
提问于 2008-11-10 14:02:16
回答 8查看 994关注 0票数 2

我的基于LLBLGen的大型32位web服务数据访问应用程序在一台专用的64位计算机上单独运行。当进程释放几乎所有分配的空间(最多1,5 2GB )时,它的物理内存消耗稳定地增长到大约2 2GB,并从这一点开始继续增长。页面输入值或其他页面文件使用参数没有明显增加,因此看起来内存被释放了,而不是换出到页面文件。我在想这是一种什么样的个人资料?实际上,没有什么可以阻止进程抓取它能抓取的所有内存,另一方面,在内存释放周围有不可接受的http内部错误-可能是清理块有用的工作。考虑到上述行为是一种可接受的行为,什么才是使清理工作不那么引人注目的好策略。

EN

回答 8

Stack Overflow用户

发布于 2008-11-10 16:01:27

这听起来像是发生了内存泄漏,进程不断地泄漏内存,直到它因内存不足而崩溃,然后由服务器自动重新启动。

在地址空间耗尽之前,1.5 32大约是32位进程可以分配的最大内存量。

需要寻找的东西:

  • 你自己做缓存吗?何时从缓存中删除项? Dispose是否存在于某个地方,数据每隔一段时间就会被添加到集合中,但从未被删除?Dispose你是否对实现IDisposable?
  • Do的每个对象调用Dispose?你是否访问过任何非托管代码(COM对象或使用DllImport)或分配非托管内存(例如使用

类)?分配到那里的任何东西都不会被垃圾收集器释放,你必须自己释放它。

  • 你使用第三方库或来自第三方的任何代码吗?它也可以包含列表中的任何问题。
票数 2
EN

Stack Overflow用户

发布于 2008-11-10 14:59:53

有没有可能你没有处理各种一次性的对象(特别是与数据库相关的)。这将留下它们,可能会占用大量的非托管资源,直到GC运行并调用它们的终结器。

有必要针对您的进程运行perfmon,并查看一些关键资源(如句柄)是否有稳定的增长,或者您的DB提供程序是否公开性能计数器然后连接或打开结果集。

票数 1
EN

Stack Overflow用户

发布于 2008-11-10 15:01:01

我同意edg回答的第一部分,但他说:

“通过在对象死亡时将其设置为null,您可以鼓励GC重用由这些对象消耗的内存,这限制了不断增长的内存消耗。”

是不正确的。您永远不需要将对象设置为null,因为在对象超出作用域之后,GC最终会收集该对象。

这在SO上的回答中已经讨论过了:Setting Objects to Null/Nothing after use in .NET

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

https://stackoverflow.com/questions/277925

复制
相关文章

相似问题

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