我们有一个第三方库,它在内部将 SafeHandle 用于非托管资源。在某些错误情况下,有必要处理对象并重新创建它。但是,在 dispose 实现中存在一个错误,该错误会阻止 Handle 在这些情况的子集中关闭。这会阻止新对象在其终结器运行之前成功创建。
已经提出了两种解决方案(都是邪恶的)来解决这个问题,直到我们可以修复第三方代码:
运行 a
GC.Collect
让终结器运行并清理对象如果 dispose 未能这样做,请使用反射获取 Handle 并关闭它
其中哪一个不那么邪恶,为什么?有没有其他我们没有考虑过的方法比这两种方法更邪恶?