C# 巨大的对象初始值设定项抛出堆栈溢出错误
C# Huge object initializer throws Stack Overflow error
我需要构建一个 对象,它包含几乎 20000 个嵌套对象(在多个级别)。每个对象都是一个简单的数据库实体,具有 1-5 个字段或一个实体列表。我正在使用 内联对象初始化程序 来启动我的根对象。
new OUTPUT() { XREF_CATALOG_MATERIALS = xrefCatalogMaterials.Find(x => x.MATERIAL.PART_NUM.Equals("xxxx")), FUNCTION = new FUNCTION() {...
我在 x86 和 x64 模式下都尝试了 运行,在这两种情况下我都得到了 Whosebug异常。相同的代码和逻辑在我的对象不是那么大的其他情况下工作正常(大约 6000 个嵌套对象)
有什么方法可以增加 .Net 应用程序堆的大小吗?有什么建议可以用来解决这个问题吗?
根据该描述,堆大小没有问题。你有堆栈大小的问题。看起来您正在尝试调用太多嵌套函数。每个函数调用都会对堆栈产生影响。
栈比堆小很多,比较容易溢出。最简单的方法是递归。
https://msdn.microsoft.com/en-us/library/system.Whosebugexception(v=vs.110).aspx
WhosebugException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion.
我需要构建一个 对象,它包含几乎 20000 个嵌套对象(在多个级别)。每个对象都是一个简单的数据库实体,具有 1-5 个字段或一个实体列表。我正在使用 内联对象初始化程序 来启动我的根对象。
new OUTPUT() { XREF_CATALOG_MATERIALS = xrefCatalogMaterials.Find(x => x.MATERIAL.PART_NUM.Equals("xxxx")), FUNCTION = new FUNCTION() {...
我在 x86 和 x64 模式下都尝试了 运行,在这两种情况下我都得到了 Whosebug异常。相同的代码和逻辑在我的对象不是那么大的其他情况下工作正常(大约 6000 个嵌套对象)
有什么方法可以增加 .Net 应用程序堆的大小吗?有什么建议可以用来解决这个问题吗?
根据该描述,堆大小没有问题。你有堆栈大小的问题。看起来您正在尝试调用太多嵌套函数。每个函数调用都会对堆栈产生影响。 栈比堆小很多,比较容易溢出。最简单的方法是递归。
https://msdn.microsoft.com/en-us/library/system.Whosebugexception(v=vs.110).aspx
WhosebugException is thrown for execution stack overflow errors, typically in case of a very deep or unbounded recursion.