我正在使用GDIView尝试跟踪一些挥之不去的GDI句柄的来源,而该来源似乎是表单菜单中使用的字体。我发现确保字体句柄已被GC的唯一方法是将它们显式设置为null,如下所示:

tsmiTextLocation.Font = null;
tsmiLocationSelection.Font = null;


这对我来说似乎不太正确,但是我不确定如何解决该问题。有人遇到过这个问题吗?

最佳答案

即使最佳方法是直接调用IDisposable.Dispose()或直接使用Dispose()或利用using关键字。某些GDI +对象是该规则的例外。

GDI +在“画笔和笔”类中包含预定义的画笔和笔。您不应该在这些类的成员返回的对象上调用Font.Dispose(或者不是由new自己创建的其他GDI预缓存对象)。

还有MSDN的注释-


  在释放对字体的最后引用之前,请始终致电Dispose。
  否则,直到垃圾回收之前,正在使用的资源才会被释放。
  收集器调用Font对象的Finalize方法。

关于c# - 为什么不处理字体句柄?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/757840/

10-17 01:16