5

我在尝试对具有大约 400 深度的 Expression<Func<MyType, bool>> 类型的 LambdaExpression 调用 Compile() 时遇到问题。较小的值不会导致任何问题。而且我找不到任何关于这种限制的信息。任何人都可以澄清这一点吗?我可以增加这个限制吗?

upd:对不起,忘了提,我收到 StackOverflowException:

System.Core.dll 中发生“System.StackOverflowException”类型的未处理异常{无法评估表达式,因为当前线程处于堆栈溢出状态。}

4

1 回答 1

3

您合法地遇到了堆栈大小的限制(尽管我质疑 400+ 项 lambda 的智慧)。绕过它的最简单方法是创建一个新线程,专门用于使用更大的堆栈执行此编译,使用将堆栈大小作为参数的线程构造函数:http: //msdn.microsoft.com/en-us/library /ms149581.aspx

在该线程中调用 compile 并根据需要增加堆栈大小参数。我相信它以字节为单位,这将使默认值约为 1048576,因此从那里开始并根据需要提高它。

于 2012-05-25T14:54:19.150 回答