HtmlAgilityPackを使用して、約200,000のHTMLドキュメントを解析しています。
これらのドキュメントの内容を予測することはできませんが、そのようなドキュメントの1つが原因で、アプリケーションが。で失敗しますStackOverflowException
。ドキュメントには次のHTMLが含まれています。
<ol>
<li><li><li><li><li><li>...
</ol>
<li>
そのようにネストされた要素は約10,000個あります。HtmlAgilityPackがHTMLを解析する方法が原因で、が発生しStackOverflowException
ます。
残念ながら、StackOverflowExceptionは.NET2.0以降ではキャッチできません。
スレッドのスタックに大きなサイズを設定することについて疑問に思いましたが、大きなスタックサイズを設定すると、ハックになります。プログラムがより多くのメモリを使用することになります(私のプログラムは、HTMLを処理するために約50スレッドを開始するため、これらのスレッドはすべてスタックサイズが大きくなります)、同様の状況が再び発生した場合は、手動で調整する必要があります。
他に採用できる回避策はありますか?