【问题标题】:The user control that is opened in custom task pane of outlook plugin, doesn't get disposed when the pane is closed在 Outlook 插件的自定义任务窗格中打开的用户控件,在窗格关闭时不会被释放
【发布时间】:2015-12-18 14:30:11
【问题描述】:

我正在开发一个 Outlook 插件。我在 Outlook 工具栏中添加了一个按钮,当用户单击该按钮时,将调用一个 web 服务。根据该 web 服务的结果,一个用户控件被加载到自定义任务窗格中。当一个用户关闭自定义任务窗格,我在用户控件上调用了dispose方法。我还在其dispose事件中释放了这个用户控件的子控件,并从customtaskpanes列表中删除了自定义任务窗格。但是内存没有释放。我还处理了自定义任务窗格。但是什么也没发生。那么,这是我的编码问题,还是 Outlook 的问题?我正在使用 .net 框架 3.5 上的 winforms。每当我使用 Outlook 占用的内存时,它都会不断增加按下按钮。

【问题讨论】:

  • 您是否使用内存分析器检查过您的应用程序?这会让您知道哪些对象没有从内存中释放,并且是您找出问题的真正原因的最佳选择。
  • 我知道用户控件没有被释放
  • 您点击按钮的时间是多少?也许垃圾收集器还没有决定收集内存。
  • 我点击了很多次。很多次导致outlook崩溃。它在没有释放它的情况下占用了接近1 GB的内存。

标签: c# winforms memory-leaks vsto outlook-addin


【解决方案1】:

如果没有任何代码示例,很难判断是否发生内存泄漏。请记住,分析托管内存可能很棘手...

但是,我的建议是您可能不应该手动处理您的 VSTO 任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不会“销毁”,您不应取消注册它。其 Visible 属性设置为 false。 请参阅下面我的 Startup.addin.cs 中启用切换 TaskPane 可见性的示例代码。

        public const string productName = "myMillionDollarAddin";
        private void RegisterTaskPane()
        {
            var tskControl = new TaskPaneControl();
            CustomTaskPane taskPane = this.CustomTaskPanes.Add(tskControl, productName);
            taskPane.Visible = true;
        }

        public void ShowHideTaskPane()
        {
            var taskPane = this.CustomTaskPanes.FirstOrDefault(ctp => ctp.Title == productName);
            if (taskPane == null)
            {
                RegisterTaskPane();
            }
            else
            {
                var visibility = taskPane.Visible;
                taskPane.Visible = !visibility;
            }
        }

【讨论】:

  • 谢谢,你的代码帮了大忙。以前outlook每次要占用大约5 mb的额外空间,我以前点击按钮。但是现在只需要大约200 KB。可以,这200 KB也被删除。因为现在我所做的只是进行网络服务调用。
  • 您好,如果切换任务窗格可见性是您采用的方法,请将答案标记为已接受。现在关于内存管理,对于 .NET 进程恕我直言,您不应该尝试在没有内存分析器的情况下调查内存。您可能希望从 Web 服务调用中刷新数据(如果它们是大量的),以便它们将被垃圾收集。但是您不应该尝试通过清理表单控件来优化 200KB 的托管内存。以下link 是所有 .NET 开发人员必读的。
  • 我打算在你回复后将其标记为已回答。因为,如果我在此之前这样做,你可能不会回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多