强制GC.Collect在Asp.net CMS网站

时间:2013-01-31 08:14:20

标签: c# asp.net .net performance iis-7

这是情况

我正在开发内容管理系统,其中我们有两个部分,第一部分是管理员用户可以填写内容的管理员端,第二部分是用户可以看到管理员提供的内容的用户端管理面板。

如果用户正在浏览我的网站,他只访问那些只做一件事的页面,他们根据页面从数据库中提取内容并向用户显示该内容。

问题是当我在本地IIS中运行我的网站并浏览它一段时间并跟踪IIS工作进程(w3wp.exe)在高峰使用时显示 109,292 K 的内存使用情况

为了解决这个问题,我将此代码放在 global.asax 文件

void Application_EndRequest(object sender, EventArgs e)
{
  GC.Collect(0, GCCollectionMode.Forced);
  GC.Collect(1, GCCollectionMode.Forced);
  GC.Collect(2, GCCollectionMode.Forced);
}

此后,在使用高峰时,使用率会降至 75,980 K

问题是我在这里做对了吗?因为我读了许多文章说我不应该执行此GC.Collect

更新 在真实环境中,这是没有任何GC.Collect()

的情况

enter image description here

1 个答案:

答案 0 :(得分:4)

您确定这是实际的问题吗?您是否尝试过多次并发访问并发现存在内存问题?

100MB的内存不是很多,所以垃圾收集器不会打扰它。如果您的进程需要更多内存,垃圾收集器将开始执行其工作。

您几乎从不需要执行强制垃圾收集,大多数情况下您的弊大于利。这是其中一个时代 - 你在内存消耗方面做的很少,但另一方面你的性能会受到影响 - 垃圾收集成本很高,而且每次请求都会运行一次。

简而言之,放弃强制垃圾收集,只有在看到实际问题时才会担心。