ASP.NET网站内存使用率相当高
我有一个ASP.NET网站,将在约3-4天内使用约2gb的物理内存,对我来说听起来真的很糟糕。目前,我已配置IIS重新启动应用程序池进程,当它达到500mb。我想尝试跟踪问题。
当在.NET中创建一个对象的新实例时,我的印象是它不需要被释放,因为.NET垃圾收集器将为我做这个。 是这样的情况还是这可能是我遇到问题的原因之一? 解决方法
.NET将非常有效地管理垃圾回收。在实现IDisposable的类型上,调用Dispose方法是明智的,这可能不是您的问题。内存泄漏可能发生在.NET中,原因很多。这里有几个:
>您可以在Session中为每个用户缓存太多的数据。 我希望这给你一些关于在哪里看的想法。 更新:您应该观看this video关于ASP.NET调试。 更新2: 关于CLR,故事在这里结束。 CLR没有具体处理实现IDisposable接口的对象。然而,.NET垃圾收集器本质上是不确定的。这意味着你不知道什么时候运行,如果它运行。这意味着在您的本地资源被清理之前可能需要很长时间(因为一个终结者只能在收集之后调用)。然而,对于许多资源,有必要在完成它们之后立即释放它们。例如,当您不关闭它们时,或者当您通过System.Drawing命名空间处理.NET中的GDI时,您将很快用尽数据库连接。 为此,引入了IDisposable界面。再次,CLR和垃圾收集器不看这个接口。它是类型和其用户之间的契约,允许用户直接释放对象的底层资源。在正常设计中,对象的终结器和对象的Dispose方法将调用相同的私有或受保护的方法来释放这些资源。当一个类型实现IDisposable时,当你完成它时,调用它是Dispose方法,或者将对象包装在一个using语句中以允许释放本地资源是确定性的,这是明智的。 所以回来你的问题。所有管理对象将由GC收集,但本机资源不会。因此,类型可能会实现一个finalizer方法,而这些对象也通常会实现IDisposable接口。对它们的调用处理将明确地并且直接地释放这些本地资源。 我希望这是有道理的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何从Visual Studio 2010 SP1运行时捕获IIS Ex
- asp.net-mvc – 使用ASP.NET MVC支持“Expect:100-continu
- Asp.net SignalR 应用并实现群聊功能 开源代码
- asp.net – 实现数据库对象的版本控制
- asp.net – 增加会话TimeOut
- asp.net-mvc – 为什么ASP.NET MVC使用会话状态?
- 确定ASP.NET中是否启用了Cookie的最佳方式?
- asp.net – 如何在aspx文件中创建区域?
- 通过asp.net中的C#将参数传递给CRYSTAL REPORT
- asp.net-mvc – asp.net mvc提交时的表单集合
- asp.net-mvc-3 – 显示模型中外键属性的显示值
- 使用TypeScript和ASP.Net WebApi完全输入
- asp.net-mvc-4 – 添加对System.IdentityModel.T
- IIS“SendResponse”状态下的请求已停留很长时间
- 视图页面中的asp.net标识声明全名
- asp.net – 如何添加jQuery UI按钮图标到输入按钮
- asp.net-core – 检查动作过滤器中的属性
- 具有Entity Framework Code Only和ASP.NET MVC的
- 问题在ASP.NET 5(Core)中添加对类库项目的引用
- asp.net-mvc – Gzip压缩无法运行ASP.net MVC5