我正在使用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/