【发布时间】:2016-08-22 06:41:49
【问题描述】:
我需要构建一个 对象,其中包含几乎 20000 个嵌套对象(在多个级别中)。每个对象都是具有 1-5 个字段或实体列表的简单数据库实体。我正在使用内联对象初始化器来初始化我的根对象。
new OUTPUT() { XREF_CATALOG_MATERIALS = xrefCatalogMaterials.Find(x => x.MATERIAL.PART_NUM.Equals("xxxx")), FUNCTION = new FUNCTION() {...
我尝试在 x86 和 x64 模式下运行,在这两种情况下我都得到 stackoverflow 异常。在我的对象不是那么大(大约 6000 个嵌套对象)的其他情况下,相同的代码和逻辑可以正常工作
有没有办法增加 .Net 应用程序堆的大小?有什么建议可以用来解决这个问题吗?
【问题讨论】:
-
你最好只加载你需要的东西,因为你需要它。我发现每次加载该对象时都需要全部 20,000 个对象是非常令人怀疑的。
-
增加堆栈大小(不是堆大小,它不是 heap 溢出)似乎不是一个很好的解决方案。问题在于设计,而不是主机系统。你有太多的嵌套函数调用。
-
@krillgar 我同意有问题的设计,我从另一个开发人员那里继承了代码,如果可能的话想尽快修复它。
-
这总是很有趣,我很遗憾听到这个消息。你最好的选择是花一些额外的时间(这可能是巨大的)来把它做好。在那段时间向你的主管恳求,否则你以后将花费 10 倍的努力来修复其他在以后继续突然出现的错误。
标签: c# .net large-object-heap