C# 在outlook插件的自定义任务窗格中打开的用户控件不';当窗格关闭时,请不要释放

C# 在outlook插件的自定义任务窗格中打开的用户控件不';当窗格关闭时,请不要释放,c#,winforms,memory-leaks,vsto,outlook-addin,C#,Winforms,Memory Leaks,Vsto,Outlook Addin,我正在开发outlook插件。我在outlook工具栏中添加了一个按钮,当用户单击该按钮时,将调用一个Web服务。根据该Web服务的结果,用户控件将加载到自定义任务窗格中。当用户关闭自定义任务窗格时,我调用了用户控件上的dispose方法。我还在disposed事件中处理了此用户控件的子控件,并从customtaskpanes列表中删除了自定义任务窗格。但是内存没有释放。我也处理了自定义任务窗格。但什么也没有发生。那么,我的编码是否有问题,还是outlook有问题?我正在使用.net frame

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

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

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

        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崩溃。它占用了接近1 GB的内存而没有释放。Thanx,你的代码帮了大忙。outlook每次都会占用大约5 mb的额外空间,我过去常单击按钮。但现在它只占用大约200 KB。可以,这200 KB也将被删除。因为现在我所做的就是调用Web服务。您好,如果您采用切换任务窗格可见性的方法,请将答案标记为已接受。现在关于内存管理,对于.NET进程IMHO,您不应该尝试在没有内存分析器的情况下调查内存。您可能希望刷新web服务调用中的数据(如果数据量很大),以便对其进行垃圾收集。但是,您不应该试图通过清理表单控件来优化200KB的托管内存。以下是所有.NET开发人员必须阅读的内容。我本来打算在您回复后将其标记为已回复。因为,如果我在那之前就这么做,您可能不会回复。