这是我的解决方案中的代码的简化版本,它使用了一个非常有问题的第三方库代码:
public GlitchyThirdPartyComponent GetThirdPartyComponent(Stream stream)
{
return new GlitchyThirdPartyComponent(stream);
}
对于某些流,构造函数GlitchyThirdPartyComponent
完全崩溃并开始消耗大量 CPU 功率和内存,并且在OutOfMemoryException
发生之前永远不会退出(在某处闻起来像无限循环)。
我试图找出最安全的调用方式,GetThirdPartyComponent
如果它仍在运行,则在某个超时后中止它的执行。
我已经检查了几个可能的解决方案,但似乎没有解决方案适合。有几个原因:
- 我无权访问第三方库源代码。所有程序集都被混淆了,所以也没有拆卸
GlitchyThirdPartyComponent
不可序列化,因此没有跨应用域或跨进程的解决方案GlitchyThirdPartyComponent
最有可能使用 COM(从它的界面上看),所以Thread.Abort
是一个非常不可靠的选择- 虽然可以使用另一个第三方库或向我当前的库供应商寻求错误修复,但这些解决方案需要时间,我的问题应该尽快修复
那么,在这种情况下我应该怎么做呢?这里真的Thread.Abort
是最好的解决方案吗?