0

这是这种情况

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

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

问题是当我在本地 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()

在此处输入图像描述

4

1 回答 1

4

你确定这是一个实际问题吗?您是否尝试过多个并发访问并发现您有内存问题?

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

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

所以简而言之,放弃强制垃圾回收,只有当你看到有实际问题时才担心它。

于 2013-01-31T08:36:54.223 回答