18得票6回答
处理字体文件真的有必要吗?

我知道最佳实践是调用任何实现IDisposable的对象的Dispose方法,特别是包装有限资源(如文件句柄、套接字、GDI句柄等)的对象。 但我遇到了一个问题,我有一个带有Font的对象,如果我要让Font得到释放,我必须通过多个对象图层传递IDisposable,并检查很多用法。我在想这...

18得票2回答
在终结器中调用RCW是否安全?

我有一个托管对象,调用COM服务器来分配一些内存。在托管对象消失前,必须再次调用COM服务器以释放该内存,以避免内存泄漏。此对象实现IDisposable以确保进行正确的内存释放COM调用。 如果未调用Dispose方法,则希望对象的终结器释放该内存。但问题是,终结器的规则是不能访问任何引用...

17得票6回答
finalize()方法的良好使用方法

这基本上是出于好奇。 我想知道除了用于调试/记录/分析目的外,是否有人遇到过Object.finalize()的有效用途? 如果你没有遇到任何情况,你会认为有什么好的用途呢?

17得票3回答
F#的析构函数等价物

我正在将一个包装非托管库的C#类翻译为F#。我遇到了一个看似简单的问题,需要重新编写紧随其后的析构函数。class Wrapper { // P/Invoke ellided private SomeType x; public Wrapper() { ...

16得票2回答
在C#中使用Finalizers的好例子

在阅读一些有关C#内存管理的文章时,我被终结器方法所困惑。 与它们相关的规则非常复杂。例如,没有人知道终结器何时会被调用,即使在构造函数中的代码引发异常,它们也会被调用;CLR不保证在程序关闭时调用所有终结器等。 那么终结器可以在现实生活中用来干什么呢? 我找到的唯一一个例子就是当GC启...

16得票2回答
C#中的终结器会抛出异常吗?

来自MSDN的引用: 如果Finalize或其覆盖方法抛出异常,运行时会忽略该异常,终止该Finalize方法,并继续进行终结进程。 但是,如果我有以下代码:~Person() { throw new Exception("meh"); } 那么这会导致运行时异常吗? p.s. 我知道这...

16得票4回答
我们能关闭finalizers吗?

由于无法保证何时以及是否运行终结器,并且现在终结器几乎被认为是一种不良实践 - 是否有任何方法说服JVM完全跳过所有终结器处理过程? 我之所以提出这个问题,是因为我们有一个庞大的应用程序,当将其移动到更新的JVM(目前不确定是哪个版本)时,会因看起来非常像终结器已知问题(抛出异常,因此GC变...

16得票3回答
C#中关于Dispose()和析构函数的两个问题

我有一个关于如何使用Dispose()和析构函数的问题。阅读了一些文章和MSDN文档,这似乎是实现Dispose()和析构函数的推荐方式。 但是,我有两个关于这种实现方式的问题,可以在下面阅读到:class Testing : IDisposable { bool _disposed ...

16得票1回答
Java中的“finalizer guardian”是如何工作的?

“终结器守卫” [《Effective Java》第30页] 是如何工作的? 您使用过它们吗?它解决了什么具体问题吗?

16得票1回答
为什么在高负载和多线程情况下使用SHA1.ComputeHash会失败?

我发现我维护的一些代码存在问题。下面的代码有一个private static SHA1成员(它是一个IDisposable,但由于它是static,因此永远不应该被完成)。然而,在压力下,这段代码会抛出一个异常,表明它已经关闭:Caught exception. Safe handle ha...