我有一个程序从Web服务请求HTML,修改HTML以突出显示搜索词,然后在WebBrowser组件中显示HTML。有时我收到的HTML会非常大,导致我在任务管理器中显示的“Mem Usage”和“VM Size”爆炸到600 Meg。如果我不执行任何其他操作,似乎我的应用程序将无限期地消耗这些内存资源。如果我执行强制GC,我可以释放这些资源,但我不愿意这样做,因为我不太明白为什么框架在不再引用时不释放资源。
我有两个问题:
提前致谢。
答案 0 :(得分:4)
垃圾收集器是一项繁重的操作,因此只有在系统决定必要时(即存在内存压力)才能完成。 600MB被“炸毁”的事实没有影响,只要系统不需要它们用于别的东西。
答案 1 :(得分:4)
除了coffee_machine'回答:只有在执行完整集合时才会收集大对象堆。只有当系统绝对需要其他资源时才会发生这种情况。
关于你的秒问题:当然,如果一个.NET程序需要内存并且运行时请求来自操作系统的内存,那么内存压力就像本机程序会请求内存并且.NET运行时将执行垃圾收集。