.NET:大型堆对象何时被垃圾收集?

时间:2011-07-18 14:16:44

标签: .net garbage-collection

我有一个程序从Web服务请求HTML,修改HTML以突出显示搜索词,然后在WebBrowser组件中显示HTML。有时我收到的HTML会非常大,导致我在任务管理器中显示的“Mem Usage”和“VM Size”爆炸到600 Meg。如果我不执行任何其他操作,似乎我的应用程序将无限期地消耗这些内存资源。如果我执行强制GC,我可以释放这些资源,但我不愿意这样做,因为我不太明白为什么框架在不再引用时不释放资源。

我有两个问题:

  1. 我的程序正在使用的“内存使用情况”和“虚拟机大小”是否可靠的指标?
  2. 如果在同一台机器上运行多个.Net应用程序,一个.Net应用程序的内存需求会导致.Net从其他.Net应用程序中释放资源吗?
  3. 提前致谢。

2 个答案:

答案 0 :(得分:4)

垃圾收集器是一项繁重的操作,因此只有在系统决定必要时(即存在内存压力)才能完成。 600MB被“炸毁”的事实没有影响,只要系统不需要它们用于别的东西。

答案 1 :(得分:4)

除了coffee_machine'回答:只有在执行完整集合时才会收集大对象堆。只有当系统绝对需要其他资源时才会发生这种情况。

关于你的秒问题:当然,如果一个.NET程序需要内存并且运行时请求来自操作系统的内存,那么内存压力就像本机程序会请求内存并且.NET运行时将执行垃圾收集。