gpt4 book ai didi

c# - OutOfMemoryException 与 gcAllowVeryLargeObjects

转载 作者:可可西里 更新时间:2023-11-01 07:55:25 25 4
gpt4 key购买 nike

我正在使用 BinarySerializer 和一个相当大(虽然不是很深)的项目图。我有 8GB 的​​ ram,由 12Gig 的交换支持,并且在序列化时出现 OutOfMemoryException,这是预期的(图表可能接近或超过 2Gb)。

然而,当我使用 gcAllowVeryLargeObjects 时,情况并没有好转,我仍然遇到同样的异常,而且我肯定正在处理应该保存在内存中的东西(至少是交换)。

有什么我可以做的来支持序列化这个/一种获得相同功能集但可能以 chunks 形式获得结果的方法吗?

我的序列化代码没有什么特别的:

    public static byte[] Serialize(this object o)
{
var ms = new MemoryStream();
var bf = new BinaryFormatter();
bf.Serialize(ms, o);
ms.Position = 0;
return ms.ToArray();
}

我正在序列化的对象包含项目数组,这些项目本身包含数组等,但完整的图表本身并不是“那么”大(这是索引数据的结果,在源中,已经只有大约 1GB尺寸)。

这也不是因为 GC 碎片(压缩大堆没有帮助)。

最佳答案

默认情况下,AnyCPU 在 x86 和 x64 操作系统上都作为 32 位进程运行。因此,即使在 x64 操作系统上设置了 gcAllowVeryLargeObjects,您也会遇到 4GB 的地址空间限制(x86 上为 2GB)。

要更改取消选中解决方案属性 -> “构建”选项卡上的“首选 32 位”属性。

详细信息和历史记录可以在以下答案中找到:What is the purpose of the "Prefer 32-bit" setting in Visual Studio 2012 and how does it actually work?

关于c# - OutOfMemoryException 与 gcAllowVeryLargeObjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206496/

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