【发布时间】:2012-05-15 01:33:54
【问题描述】:
我在我的应用程序中遇到 GDI 字体和画笔泄漏。如何在我的源代码中找到已创建(和已处置)的对象?
我没有任何 toHFont 调用,并且所有对 Graphics 的访问都封装在 using 语句中。我从 GDIView 和 .NET Memory Profiler 等工具中知道它的画笔和字体 - 但他们没有说明在我的源代码中创建泄漏对象的位置。
我在 VS2008、.NET 3.5 中使用 C#。
【问题讨论】:
-
代码审查怎么找不到。您肯定只在代码中的选定位置使用它们吗?否则,您将需要一个真正的 内存分析器来克服这个障碍,GDIView 和.NET MP 不符合那个标准。真实 = 金钱。
-
我使用带有
Graphics的字体并将字体分配给控件。画笔仅用于Graphics。我也尝试重用它们,因为它们通常是静态变量,所以我不明白泄漏的点。 -
静态变量是故意泄漏。它永远持有对画笔对象的引用。这样做没有任何意义,创建画笔对象非常便宜,只需要一微秒。
-
为什么它会被一次又一次地使用而故意泄漏。只有大约 10 个变量,但 GDI 泄漏了数百种字体。
标签: .net gdi resource-leak