2010-10-27 45 views
2

我有一个WPF应用程序,似乎没有在x64系统上收集垃圾。我已经在x86机器上进行了仔细的测试,我相信这不是一个编程问题,内存使用量将会增长,然后按照我的预期进行垃圾回收。目标平台=“任何CPU”.NET垃圾收集器在x86/x64之间的区别。 x64不收集

我发现,我可以通过与目标= 86编译消除在x64机器这种行为。 x64或“任何CPU”无法释放内存。

我在我的调查,创建一个子应用程序域和手动最小化应用程序工作在x86上设置的作品,但在x64系统中被忽略也注意到了。直到我设置目标= x86。

有谁知道为什么这种行为的存在?我们是否需要避免'任何CPU'或x64?

+0

该机器的可用内存量是多少?那里的内存总量是多少? – zerkms 2010-10-27 01:01:59

+0

至少某些版本的Windows 32位将在您最小化应用程序的工作集时强制最小化。也许这是从64位版本中消除的。 – 2010-10-27 01:37:34

+2

请勿使用Taskmgr.exe来诊断GC问题。 – 2010-10-27 05:29:48

回答

2

垃圾收集器,当它决定它需要运行运行。这通常是内存使用量以及可用内存量的问题。

如果有问题的机器(S)拥有大量的内存,没有理由对GC执行。在x86机器中,内存压力通常是一个问题,因为一个进程的总可用内存要小得多(通常为2GB),并且整个系统总体(总共约3GB)较低。 64位系统没有这些限制,所以GC可能运行的频率较低。

但请记住,这不是坏事 - 使用内存是,只要你没有用完。更多的GC收集只会降低您的整体性能,只有在可用内存不足的情况下才是好事。否则,你可能会使用可用的内存。