设置图标属性时,NotifyIcon内存泄漏

本文关键字:NotifyIcon 内存 泄漏 图标 属性 设置 | 更新日期: 2023-09-27 18:07:54

我试图设置notifyicon控件的图标,但每次我改变图标属性,我可以看到我的应用程序的内存增加,即使我释放图标。

这是我的代码(c#):
public void CheckNotifyIcon(bool visible)
{
        if (notifyIcon.Icon != null)
            notifyIcon.Icon.Dispose();
            notifyIcon.Icon = visible 
                ? new Icon(Pic1, new Size(32, 32)) 
                : new Icon(Pic2, new Size(32, 32));
            notifyIcon.Visible = visible;
}

我做错了什么?

谢谢!

设置图标属性时,NotifyIcon内存泄漏

而不是有一个单一的NotifyIcon和不断切换它的Icon属性到Icon的临时实例,我会创建两个NotifyIcon控件,并适当地显示/隐藏它们。这样,Icon实例在窗体的生命周期中只创建一次,而不是不断地被处理和重新创建(它们的最终处理是由WinForms设计器为您编写的管道代码为您管理的)。虽然这不会告诉您内存泄漏发生在哪里,但它应该首先避免内存泄漏。

启动Redgate的ANTS内存分析器来找出原因如何?

此外,我建议不要捕获并吃掉异常以获得更多信息。

首先,您发布的代码中没有泄漏。你处理图标,当然。net垃圾收集器不会泄漏。

在你所陈述的问题的评论中:

我只看到taskmgr.exe的内存增加,而不是

这就是你问题的根源。Windows内存管理是非常复杂的,任务管理器不是一个合适的工具来诊断泄漏。

将它与。net垃圾收集器结合起来,画面就更加混乱了。只要不影响系统的其余部分,垃圾收集器完全可以自由地保留所有已分配的内存。

检测。net中的内存泄漏是一项复杂的任务,需要专门的工具。