.NET垃圾收集器x86 / x64之间的区别。 x64不收集

时间:2010-10-27 00:58:12

标签: .net garbage-collection

我有一个WPF应用程序,似乎在x64系统上没有垃圾收集。我已经在x86机器上仔细测试了它,我相信它不是编程问题,内存使用量会增长,然后会像我预期的那样被垃圾收集。目标平台='任何CPU'

我发现通过使用target = x86进行编译,我可以在x64机器上消除这种行为。 x64或“任何CPU”无法释放内存。

我在调查期间还注意到,创建子应用程序域并手动最小化应用程序工作集在x86上工作但在x64系统上被忽略。直到我设置target = x86。

有谁知道为什么会出现这种行为?我们需要避免“任何CPU”或x64吗?

1 个答案:

答案 0 :(得分:2)

垃圾收集器在确定需要运行时运行。这通常取决于内存使用量以及可用内存量。

如果有问题的机器有大量内存,则没有理由执行GC。在x86机器中,内存压力通常是一个问题,因为进程的总允许内存要小得多(通常为2gb),系统的总内存总量很低(~3gb)。 64位系统没有这些限制,因此GC的运行频率可能会降低。

请记住,这不是一件坏事 - 如果您没有用完,使用内存。更多GC集合只会降低您的整体性能,如果您的可用内存不足,那么这只是一件好事。否则,您也可以使用可用的内存。