我们发现我们的一个自动生成的程序集在new()上抛出StackOverflowException。这个类有(请随我)400个简单的属性被初始化(大部分是默认的(字符串)等)在构造函数中。如何更改托管executable.net的默认堆栈大小
我们注意到它在64位上很好,但是在32位上它很棒!
我们需要测试我们的用例是否合理,以创建一个更大的默认堆栈,以便在重新构造代码生成器时为我们提供呼吸空间。
我们会特别的。如果可能的话,对涉及app.config的解决方案感兴趣。但我是一个现实主义者,所以一切都会很好。
堆栈溢出的重要原因。我们已经缩小了相关构造函数的错误。我的第一印象也是无限递归的类型。然而,我们使用3线控制台应用程序再现了错误:
- 创建类的空实例。
- 在第一份工作要创建的类上调用一个非静态方法(克隆),并且清空实例已准备好将这些属性传入。
它碰到第二个构造函数时会发生爆炸。
现在使用.net源代码进行调试时,我们看到堆栈溢出位于Guid.NewGuid()中,它作为第二个参数传递给构造函数。实际的代码行是对本地CoCreateGuid()调用的调用。
所以,虽然它可能是CoCreateGuid()中的一个错误,但我们希望从问题中消除我们的代码。我的第一个想法是大量增加堆栈的大小,并查看是否再次出现此错误。然后,因为我认为我们可以控制所有用例,所以用对象初始化替换构造函数 - 认为这可以减轻堆栈上的压力。
Nb。我们可以通过从类中删除int属性来阻止错误发生。
好的,所以我投了票,没有看到在http://stackoverflow.com/questions/1042347/how-do-you-change-default-stack-size-for-managed-executable上的建议重复。对于那个很抱歉。既然这一个实际上已经得到了回答,而另一个则没有,我认为我们应该让这个开放并关闭另一个。 – 2009-06-25 05:58:41
哎呀复制是一个浏览器口吃的情况下真正点击回想我想添加更多的信息 - 但显然它张贴。 – 2009-06-25 09:32:15