.NET垃圾收集在这里不能正常工作?

时间:2011-06-15 07:54:28

标签: .net garbage-collection

我们在.NET 4.0,IIS 7,ASP.NET,4 GB服务器RAM上运行了一个图像转换脚本,可以调整大图像的大小,因此需要大量内存。

第一个脚本将内存使用率提高到几乎100%,几乎没有为正在运行的SQL Server留下任何内容(在运行20 MB而不是通常的900 MB之前放弃了内存)。

在第二个脚本中,我们添加了一个GC.Collect()和(确定)每个周期后一秒钟线程休眠,一切都恢复正常。

问题:这不是.NET内存管理中的一个缺陷吗?系统是否应该仔细查看可用内存发生的情况,减慢速度并清理?

3 个答案:

答案 0 :(得分:4)

根据docs

  

垃圾收集发生了   请求时自动   记忆不能满足使用   可用的免费记忆。

我认为这种情况并不满足,因为SQL Server正在倒退。至于它是一个bug;文档会建议这是设计的。

答案 1 :(得分:1)

是当内存不足以进行下一个操作时,垃圾收集会完成它的工作。但

声明为全局或由全局对象使用的对象不受GC的影响。因此,尽可能尝试将对象保持在本地。

答案 2 :(得分:0)

这可能是.Net内存管理中的一个缺陷。我们需要您的代码确定。

但我会首先查看您的代码,以了解一次性资源配置不当的情况。这已知会导致内存泄漏,这就是IDisposable接口存在的原因。