ミニダンプによると、特定のファイルが再帰降下パーサーでスタック オーバーフローを引き起こしている状況に遭遇しました。残念ながら、問題を再現するためにこれを行うファイルの例を手に入れることができません (クライアントには機密性に関する懸念があります)。
明らかにパーサーには注意が必要ですが、今のところ私の最優先事項は、プログラムを実行し続けることです。その場しのぎの措置として、これがプログラム全体をダウンさせないようにするにはどうすればよいですか?
私の最初の選択は、オーバーフローが発生する前にパーサーを適切に中止できるように、スタックのスペースが不足していることを予測する方法を見つけることです。ファイルの解析に失敗することは、許容されるオプションです。2 番目の選択肢は、エラーを発生させ、エラーをキャッチしてログに記録し、残りのデータを続行することです。
解析はParallel.ForEach()
ループで行われています。それが助けになるなら、私はそれを他のアプローチと交換したいと思っています。
編集: 本当にキラーになるのは、現在のスレッドのスタックのサイズとスタック ポインターの位置を取得できる場合です。これは可能ですか?
編集 2: 私は最終的に誰かからサンプル ファイルを絞り出し、デバッガーでエラーをトラップすることができました。それは私たちに属しているコードではないことが判明しました - 例外はHtmlAgilityPackのどこかで発生しています。そのため、まったく別のタックルを見つけようとする必要があるようです。