これは、非常にグリッチなサードパーティ ライブラリ コードを使用する私のソリューションのコードの簡略化されたバージョンです。
public GlitchyThirdPartyComponent GetThirdPartyComponent(Stream stream)
{
return new GlitchyThirdPartyComponent(stream);
}
一部のストリームでは、コンストラクターがGlitchyThirdPartyComponent
完全にフリークアウトし、多くの CPU パワーとメモリを消費し始め、OutOfMemoryException
発生するまで終了しません (どこかで無限ループのようなにおいがします)。
GetThirdPartyComponent
まだ実行中の場合、特定のタイムアウト後に呼び出して実行を中止する最も安全な方法を見つけようとしています。
考えられる解決策をいくつか調べましたが、適切な解決策はないようです。これにはいくつかの理由があります。
- サードパーティ ライブラリのソース コードにアクセスできません。すべてのアセンブリは難読化されているため、逆アセンブルもありません
GlitchyThirdPartyComponent
シリアル化できないため、クロスアプリドメインまたはクロスプロセス ソリューションはありませんGlitchyThirdPartyComponent
ほとんどの場合、(インターフェイスの外観から) COM を使用するためThread.Abort
、非常に信頼性の低いオプションです。- 別のサードパーティ ライブラリを使用するか、現在のライブラリ ベンダーにバグ修正を依頼することは可能ですが、これらの解決策には時間がかかり、私の問題はできるだけ早く修正する必要があります。
では、この状況で私は何をすべきでしょうか?ここで本当にThread.Abort
最善の解決策はありますか?