这是情况
我正在开发内容管理系统,其中我们有两个部分,第一部分是管理员用户可以填写内容的管理员端,第二部分是用户可以看到管理员提供的内容的用户端管理面板。
如果用户正在浏览我的网站,他只访问那些只做一件事的页面,他们根据页面从数据库中提取内容并向用户显示该内容。
问题是当我在本地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()
答案 0 :(得分:4)
您确定这是实际的问题吗?您是否尝试过多次并发访问并发现存在内存问题?
100MB的内存不是很多,所以垃圾收集器不会打扰它。如果您的进程需要更多内存,垃圾收集器将开始执行其工作。
您几乎从不需要执行强制垃圾收集,大多数情况下您的弊大于利。这是其中一个时代 - 你在内存消耗方面做的很少,但另一方面你的性能会受到影响 - 垃圾收集成本很高,而且每次请求都会运行一次。
简而言之,放弃强制垃圾收集,只有在看到实际问题时才会担心。