x86/x64之间的.NET垃圾收集器差异。x64不';收集

x86/x64之间的.NET垃圾收集器差异。x64不';收集,.net,garbage-collection,.net,Garbage Collection,我有一个WPF应用程序,它似乎不会在x64系统上进行垃圾收集。我已经在x86机器上仔细测试了它,我相信这不是一个编程问题,内存使用会增加,然后会像我预期的那样被垃圾收集。目标平台='任何CPU' 我发现,通过使用target=x86进行编译,可以消除x64机器上的这种行为。x64或“任何CPU”无法释放内存 我在调查期间还注意到,创建子应用程序域和手动最小化应用程序工作集在x86上有效,但在x64系统上被忽略。直到我将目标设置为x86 有人知道为什么会有这种行为吗?我们需要避免“任何CPU”或x

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

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

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


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

垃圾收集器在决定需要运行时运行。这通常是内存使用量和可用内存量的问题

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


不过,请记住,这并不是一件坏事——只要你没有用完内存,使用内存是件好事。更多的GC收集只会降低总体性能,只有在可用内存不足时才是一件好事。否则,您最好使用可用的内存。

该机器上有多少可用内存?内存总量是多少?至少有些版本的Windows 32位会在最小化应用程序的工作集时强制最小化它。可能这已从64位版本中删除。不要使用Taskmgr.exe诊断GC问题。