gpt4 book ai didi

.net - DotNET 应用程序中的 GDI 句柄

转载 作者:行者123 更新时间:2023-12-03 05:13:03 30 4
gpt4 key购买 nike

我的纯 DotNET 库作为插件在非托管桌面应用程序中运行。我收到了稳定的(虽然低)崩溃报告流,这些报告似乎表明 GDI 句柄存在问题(错误消息中的字体等。恢复为系统字体,各种控件的显示崩溃,不久后发生大规模崩溃) )。

我的窗体几乎没有控件,但我在用户控件中进行了大量 GDI+ 绘图。有什么好方法可以知道我正在使用多少个句柄,甚至泄漏了多少个句柄?

谢谢,大卫

最佳答案

GDIView 开头从Ray Vega的回答中,我发现this tip :

[DllImport("User32")] 
extern public static int GetGuiResources(IntPtr hProcess, int uiFlags);

public static void GetGuiResourcesGDICount()
{
//Return the count of GDI objects.
Console.WriteLine("GDICount"+GetGuiResources(System.Diagnostics.Process.GetCurrentProcess().Handle, 0));
}

private void button1_Click(object sender, System.EventArgs e)
{
GetGuiResourcesGDICount();
}

GDIView 通知字体对象正在泄漏;然后,我将对 GetGuiResources 的调用添加到我们的日志记录代码中,以检测触发对象创建的时间点。

在我们的例子中,当Label控件的父UserControl隐藏在背景窗口中时,我们更新了Label控件的文本。这会导致 GDI 泄漏字体句柄。为了解决这个问题,我们更改了逻辑,除非标签当前在屏幕上可见,否则不更新标签。为了确定它是否可见,我们记录了 UserControl 上次绘制的时间。

关于.net - DotNET 应用程序中的 GDI 句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2483011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com