首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC3内存管理

MVC3内存管理
EN

Stack Overflow用户
提问于 2012-02-23 15:28:52
回答 2查看 1.3K关注 0票数 1

检查ASP.NET MVC3应用程序中的内存使用情况的最佳方法是什么?

我的宿主提供商告诉我要经常回收IIS应用程序池,以提高站点的速度。这就是所谓的“推荐实践”吗?我当然不需要频繁地重启我的应用程序?我更愿意找出这是不是我的应用程序中的内存使用问题,并纠正它。因此,你使用的任何技巧和最佳实践也会很有帮助。

该应用程序基于ASP.NET MVC3、C#和EF Code First。任何指导,链接感谢。

编辑:我在发帖后发现了这个页面,它非常有用。但我还是想听听其他的意见。

ASP.NET MVC and EF Code First Memory Usage

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 16:29:58

默认情况下,IIS会以一段时间间隔(我认为是29小时左右)自动回收应用程序池,但这肯定是由主机设置的,无论进程使用的内存有多少或多大。THe回收触发器可以是时间间隔,也可以是进程达到某个内存使用限制时的回收触发器。我相信任何共享主机都设置了这两项。

关于内存使用情况,您可以使用GC.GetTotalMemory方法,该方法将提供大致的内存使用情况。即使在使用Perfmon时,读数也不是很准确,但它给了您一个概念。

代码语言:javascript
复制
//global.asax.cs
 void Application_EndRequest(object o,EventArgs a)
 {
   var ctype=Context.Response.Headers["Content-Type"];
   if (ctype == null || !ctype.Contains("text/html")) return;  
   Context.Response.Write(string.format("<p>Memory usage: {0}</p>",GC.GetTotalMemory(false)));
 }

请注意,您将看到使用率不断增加,直到GC生效,使用率将下降到一个更“现实”的值。

如果你有钱,我推荐一个专门的工具,比如Memory profiler

如果应用程序有内存或性能问题,您至少可以做好准备的其他事情:

  • 应用程序的适当分层,这意味着您可以重构效率较低的部分,而不会影响其他部分。
  • 存储库模式将是非常有用的,因为你可以开始使用EF,找出EF使用了很多内存(就像你已经找到的链接),但然后你可以将存储库实现切换为使用PetaPoco或Dapper.net。
  • 通常是一个更重的库,如果应用程序不需要ORM功能,而只是使用数据库的一种快速方法,从一开始就使用上面提到的mico。
  • 总是处理实现Orm的对象来处理大型数据库记录,使用分页。这对服务器资源的使用和用户尽可能多地使用YAGNI (你会需要它)原则都是有好处的,这在某种程度上暗示了一点TDD :)
票数 0
EN

Stack Overflow用户

发布于 2012-02-24 00:19:28

我有一个从不回收的网站(直到每周重新启动机器)

您的应用程序通常应该保持良好的性能。如果不是这样,那一定是泄漏了。这可能是因为

  1. 缓存从不过期
  2. 缓存从不expires
  3. Session存储保持增长并且从不将out
  4. ObjectContexts释放并保留在会话中,等等应该释放的
  5. 对象不是通过依赖项注入容器创建的
  6. 对象未设置为在每次请求后释放,因此可能具有不断增长的内部集合。

有更多的原因-但这些是几个主要的原因。

所以真正的问题是‘没有最佳实践--这取决于你的应用程序’。

如果您在重新启动期间担心当前会话,请记住,重新启动可以很快,并且允许当前请求完成(有时),并且表单身份验证令牌将在重新启动后存活下来,但是,除非您配置进程外状态服务器,否则会话将无法存活。

如果你的内存使用量持续增长,那么设置一个重新启动计划,否则一周一次,或者永远不做-或者一旦内存使用到XYZ,就设置,然后重置。一旦达到某个阈值,ASP.NET也会根据主机在memoryLimit上的设置自动重启:http://msdn.microsoft.com/en-us/library/7w2sway1.aspx

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

https://stackoverflow.com/questions/9408802

复制
相关文章

相似问题

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