C#大型对象初始值设定项引发堆栈溢出错误
我需要构建一个对象,它几乎由20000个嵌套对象组成(在多个级别中)。每个对象都是一个简单的数据库实体,具有1-5个字段或实体列表。我正在使用内联对象初始值设定项启动根对象C#大型对象初始值设定项引发堆栈溢出错误,c#,.net,large-object-heap,C#,.net,Large Object Heap,我需要构建一个对象,它几乎由20000个嵌套对象组成(在多个级别中)。每个对象都是一个简单的数据库实体,具有1-5个字段或实体列表。我正在使用内联对象初始值设定项启动根对象 new OUTPUT() { XREF_CATALOG_MATERIALS = xrefCatalogMaterials.Find(x => x.MATERIAL.PART_NUM.Equals("xxxx")), FUNCTION = new FUNCTION() {... 我尝试在x86和x64模式下运行,在这两
new OUTPUT() { XREF_CATALOG_MATERIALS = xrefCatalogMaterials.Find(x => x.MATERIAL.PART_NUM.Equals("xxxx")), FUNCTION = new FUNCTION() {...
我尝试在x86和x64模式下运行,在这两种情况下都出现堆栈溢出异常。同样的代码和逻辑适用于我的对象没有那么大的其他情况(大约6000个嵌套对象)
有没有办法增加.Net应用程序堆大小?有什么建议可以用来解决这个问题吗?从描述中可以看出,堆大小没有问题。堆栈大小有问题。看起来您试图调用太多嵌套函数。每个函数调用都会对堆栈产生影响。 堆栈比堆小得多,并且相对容易溢出。最简单的方法是递归
你最好只装你需要的东西,因为你需要它。我觉得每次加载20000个对象时都需要所有对象是很可疑的。增加堆栈大小(不是堆大小,也不是堆溢出)似乎不是一个很好的解决方案。问题在于设计,而不是主机系统。你有太多的嵌套函数调用。@krillgar我同意设计有问题,我从另一个开发人员那里继承了代码,并希望在可能的情况下快速修复。这总是很有趣,听到这个消息我很难过。你最好的办法是多花点时间(这可能是一个巨大的代价)把事情做好。向你的主管请愿,否则你将花费10倍的努力来修复其他的bug,这些bug会在以后的某个时候突然出现。
StackOverflowException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion.