gpt4 book ai didi

c# - 64 位 .Net 应用程序中的内存限制?

转载 作者:IT王子 更新时间:2023-10-29 04:38:44 26 4
gpt4 key购买 nike

在我的笔记本电脑上,运行 64 位 Windows 7 和 2 Gb 可用内存(如任务管理器所报告),我能够:

var x = new Dictionary<Guid, decimal>( 30 * 1024 *1024 );

如果我手头没有一台有更多 RAM 的计算机,我想知道这是否可以扩展,以便在具有 4 Gb 可用内存的计算机上,我将能够分配 60M 项而不是“仅仅”30M 等等上?

或者在我能够消耗所有可用 RAM 之前是否会遇到其他限制(.Net 和/或 Windows)?

更新:好的,所以我不允许分配大于 2 Gb 的单个对象。知道这一点很重要!但是我当然很想知道我是否能够通过像这样分配 2 Gb block 来充分利用所有内存:

  var x = new List<Dictionary<Guid, decimal>>();
for ( var i = 0 ; i < 10 ; i++ )
x.Add( new Dictionary<Guid, decimal>( 30 * 1024 *1024 ) );

如果计算机有 >20Gb 的可用内存,这会工作吗?

最佳答案

.NET 中的所有对象都有 2 GiB 的限制,您永远不能创建超过 2 GiB 的单个对象。如果你需要一个更大的对象,你需要确保对象是由小于 2 GiB 的部分构建的,所以你不能有大于 2 GiB 的连续位数组或大于 512 MiB 的单个字符串,我不是完全确定该字符串,但我已经对该问题进行了一些测试,并且在我尝试分配大于 512 MiB 的字符串时遇到 OutOfMemoryExceptions。

虽然这些限制受堆碎片的影响,即使 GC 确实尝试压缩堆,大对象(这在某种程度上是任意跨越 80K 左右)最终还是在大对象堆上,这是一个堆'压缩。严格来说,有点旁注,如果您可以将短期分配保持在该阈值以下,那么您的整体 GC 内存管理和性能会更好。

关于c# - 64 位 .Net 应用程序中的内存限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com