c# - 工具条内存泄漏

标签 c# winforms memory memory-leaks toolstrip

我一直在使用 SWF-ToolStrip 时遇到内存泄漏问题。 根据这个http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115600#已解决。但是这里好像不是。

有人知道怎么解决吗?

最佳答案

这个问题似乎在 .NET 3.5 SP1 和 .NET 4.0 中仍然存在。

要重现该问题,您必须创建一个 ToolStrip,其中的项数超过它可以显示的项数,这会导致它创建一个溢出按钮。 只有当您实际单击溢出按钮时,问题才会出现。单击它会导致创建一个订阅 Microsoft.Win32.UserPreferenceChangedEventHandler 事件的 ToolStripOverflow 对象。 ToolStrip 不处理 ToolStripOverflow 对象,这导致事件处理程序未被删除并导致泄漏。

这在创建带有 ToolStrip 的表单的大型应用程序中给我们带来了巨大的问题。

解决方法是更改​​托管 ToolStrip 的窗体或控件的 Dispose 方法,如下所示:

protected override void Dispose(bool disposing)
{

    if (disposing)
    {
        var overflow = toolStrip1.OverflowButton.DropDown as ToolStripOverflow;
        if (overflow != null)
            overflow.Dispose();
    }


    if (disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}

这为我们解决了

关于c# - 工具条内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1865741/

相关文章:

c++ - C++ 中的 "double free or corruption"错误

c# - 为什么列表使用的内存几乎是数组的 3 倍?

window 尺寸

c# - 拖放移动控件而不是复制

c# - 设置大文件下载超时

c# - Ffmpeg 在解码时卡住

asp.net - wcf wsDualHttpBinding ASP.NET 页面和 Web 服务之间的安全问题

c++ - 静态内存实例中的字符串计数

c# - MySqlParameterCollection : How to add an explicit true/false value of a parameter for JSON boolean?

c# - NHibernate:如何将查询与 anD 条件结合起来?