5

深さが約400のExpression<Func<MyType、bool >>型のLambdaExpressionでCompile()を呼び出そうとすると、問題が発生します。値を小さくしても問題は発生しません。そして、私はそのような種類の制限について何も見つけることができません。誰かがこれを明確にすることができますか?この制限を増やすことはできますか?

upd:申し訳ありませんが、言及するのを忘れて、StackOverflowExceptionが発生しています:

System.Core.dllで「System.StackOverflowException」タイプの未処理の例外が発生しました{現在のスレッドがスタックオーバーフロー状態にあるため、式を評価できません。}

4

1 に答える 1

3

あなたは合法的にスタックサイズの制限にぶつかっています(私は400以上のアイテムラムダの知恵に疑問を持っていますが)。これを回避する最も簡単な方法は、スタックサイズを引数として取るスレッドコンストラクターを使用して、より大きなスタックでこのコンパイルを実行するための新しいスレッドを作成することです。http: //msdn.microsoft.com/en-us/library /ms149581.aspx

そのスレッドでcompileを呼び出し、必要に応じてスタックサイズの引数を増やします。これはバイト単位であり、デフォルトで約1048576になると思います。そこで開始し、必要に応じて上げます。

于 2012-05-25T14:54:19.150 に答える