Ron*_*dau 14 .net c# out-of-memory .net-4.5 gcallowverylargeobjects
我正在使用BinarySerializer,它有一个非常大的(尽管不是很深)项目图.我有8GB的ram支持12Gig的交换,并且在序列化时我得到一个OutOfMemoryException,这是预期的(图表可能接近或超过2Gb).
然而,当我使用gcAllowVeryLargeObjects它并不是更好,我仍然得到相同的异常,我肯定在应该保留在内存中的东西(至少与交换).
有什么我可以做的来支持序列化这个/一种方法来获得相同的功能集,但可能会得到结果?
我的序列化代码没有什么特别之处:
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();
}
Run Code Online (Sandbox Code Playgroud)
我正在序列化的对象包含自身包含数组等的项目数组,但完整的图形本身并不"大"(这是索引数据的结果,在源处,已经只有大约1GB的大小).
这不是由于GC碎片造成的(压缩大堆没有帮助).
Ale*_*kov 18
默认情况下,AnyCPU在x86和x64 OS上都以32位进程运行.因此,即使gcAllowVeryLargeObjects在x64操作系统上设置,也会遇到4GB的地址空间限制(x86上为2GB).
要更改取消选中解决方案属性 - >"构建"选项卡上的"首选32位"属性.
详细信息和历史记录可以在以下答案中找到:Visual Studio 2012中"首选32位"设置的目的是什么?它实际上如何工作?
| 归档时间: |
|
| 查看次数: |
9705 次 |
| 最近记录: |