相关疑难解决方法(0)

在CLR 4.0中,单个对象的大小仍然限制为2 GB?

据我所知,.NET中的单个实例有2 GB的限制.我没有太多关注,因为到目前为止我主要使用32位操作系统.在32但它或多或少是一个人为的限制.但是,我很惊讶地发现这个限制也适用于64位.NET.

由于诸如List<T>使用数组来存储项目之类的集合,这意味着与在64位上运行的相同应用程序相比,在32位上运行的.NET应用程序将能够在列表中保存两倍的引用类型项.这非常令人惊讶.

有谁知道这个限制是否在CLR 4.0中得到解决(目前我手头没有安装4.0).

.net memory clr4.0

39
推荐指数
3
解决办法
2万
查看次数

.Net为什么我不能在x64进程中获得超过11GB的已分配内存?

我认为64位进程的最大用户空间是8TB,但我做了一点测试,我可以得到的最大值是10-11GB.

注意:我在一个过程中不需要那么多内存,我只是想了解为什么出于好奇.

这是我的测试程序:

static void Main(string[] args)
{
    List<byte[]> list = new List<byte[]>();

    while (true)
    {
        Console.WriteLine("Press any key to allocate 1 more GB");
        Console.ReadKey(true);
        list.Add(new byte[1024 * 1024 * 1024]);

        Console.WriteLine("Memory size:");
        double memoryUsage = Process.GetCurrentProcess().PeakVirtualMemorySize64 / (double)(1024 * 1024 * 1024);
        Console.WriteLine(memoryUsage.ToString("0.00") + " GB");
        Console.WriteLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

将测试程序更新为更具确定性.

要接受答案,我想知道如果8TB仅是理论上,如何​​计算实际最大分配内存.

.net memory-management process

16
推荐指数
2
解决办法
6084
查看次数

标签 统计

.net ×2

clr4.0 ×1

memory ×1

memory-management ×1

process ×1