【发布时间】:2011-05-21 14:43:19
【问题描述】:
我们有一个第三方库,它在内部使用 SafeHandle 来处理非托管资源。在某些错误情况下,有必要处理对象并重新创建它。但是,在 dispose 实现中存在一个错误,该错误会阻止 Handle 在这些情况的子集中关闭。这会阻止新对象在其终结器运行之前成功创建。
已经提出了两种解决方案(都是邪恶的)来解决这个问题,直到我们可以修复第三方代码:
运行
GC.Collect以使终结器运行并清理对象使用反射获取 Handle 并在 dispose 失败时将其关闭
其中哪一个不那么邪恶,为什么? 有没有其他我们没有考虑过的方法比这两种方法更邪恶?
【问题讨论】:
-
反射,我会说,除非代码可以被认为很可能会改变其内部实现。
标签: c# .net reflection garbage-collection private-members