【发布时间】:2010-10-30 09:03:29
【问题描述】:
垃圾收集器可以为 .NET 进程分配的最大内存是多少?当我编译到 x64 时,Process.GetCurrentProcess.MaxWorkingSet 返回大约 1.4GB,但是当我编译到 AnyCPU (x64) 时返回相同的数字。对于 x64,它应该更像任务管理器中显示的“限制”值。我怎样才能得到正确的数字,在所有情况下都超过时会导致 OutOfMemory-Exceptions?
该方法应返回的一些示例:
1) 机器配置:x64-Windows,4GB 物理内存,4GB 页面文件
- 作为 64 位进程:8GB
- 作为 32 位进程:1.4GB
2) 机器配置:x64-Windows,1GB 物理内存,2GB 页面文件
- 作为 64 位进程:3GB
- 作为 32 位进程:1.4GB
3) 机器配置:x32-Windows,4GB 物理内存,4GB 页面文件
- 作为 64 位进程:不会发生
- 作为 32 位进程:1.4GB
4) 机器配置:x32-Windows,512MB 物理内存,512MB 页面文件
- 作为 64 位进程:不会发生
- 作为 32 位进程:1.0GB
【问题讨论】:
-
这是一篇有趣的文章,讨论了 .NET 进程将开始看到内存不足异常的理论最大值和范围:blogs.msdn.com/b/tom/archive/2008/04/10/…