我正在开发Outlook插件。我在Outlook工具栏中添加了一个按钮,当用户单击该按钮时,一个web服务被调用。取决于该web服务的结果,一个usercontrol被加载到一个自定义任务窗格中。当用户关闭自定义任务窗格时,我调用用户控件上的dispose方法。我还处置该用户的子控件控制其处置的事件,并从customtaskpanes列表中删除自定义任务窗格。但内存不释放。我还处理了自定义任务窗格。但没有发生任何事情。因此,这是我的编码问题,还是它是一个问题与Outlook?我正在与.NET Framework 3.5的WinForms。无论何时按下按钮,Outlook占用的内存都会不断增加。当窗格关闭时,在Outlook自定义任务窗格中打开的用户控件在窗格关闭时不会被释放
回答
很难判断在没有任何代码示例的情况下是否发生内存泄漏。请记住,分析托管内存可能会很棘手...
但是,我的建议是,你可能不应该手动处理你的VSTO任务窗格控件。如果用户单击隐藏任务窗格,则任务窗格不会“销毁”,您不应注销它。其可见性属性设置为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;
}
}
Thanx,你的代码有很多帮助。前景每次占用大约5 MB的额外空间,我用来点击按钮。但现在它只需要大约200 KB。可以,这200 KB也可以删除。因为现在所有我正在做的是一个web服务调用。 –
嗨,如果切换任务窗格可见性是您采取的方法,请将答案标记为已接受。现在关于内存管理,对于一个.NET进程恕我直言,你不应该试图调查没有内存分析器的内存。您可能需要刷新Web服务调用的数据(如果它们很多),以便它们被垃圾收集。但是,您不应该通过清除表单控件来尝试优化200KB的托管内存。所有.NET开发人员都必须阅读以下[链接](https://www.simple-talk.com/redgatebooks/ChrisFarrell/Under_the_Hood_of_NET_Management.pdf)。 –
我会在回复之后将其标记为回答。因为如果在那之前我会这样做,那么您可能不会回复。 –
- 1. Outlook自定义任务窗格控件
- 2. 如何在主窗口关闭时关闭自定义窗口?
- 3. NetOffice - Outlook中约会窗口中的自定义任务窗格
- 4. 在InfoPath中,在打开时隐藏自定义任务窗格
- 5. 当窗口关闭时释放NSWindowController
- 6. 当表格关闭时打开所有者窗体
- 7. 其他(已开通),自定义任务窗格显示自定义任务窗格在Outlook中VSTO
- 8. TabGroupPaneRegionAdapter,如何在其关闭时再次打开内容窗格
- 9. 当父窗口在Jquery中关闭时关闭子窗口
- 10. WPF/C# - 窗口在打开时关闭
- 11. 当父窗口关闭时自动关闭子窗口
- 12. 当表格关闭时释放内存
- 13. 关闭窗口MVVM风格
- 14. 打开的窗口将不会关闭
- 15. C# - 如何关闭主窗体和子窗体(只有当主窗体关闭时子窗口才会关闭)
- 16. 关闭浏览器时打开自定义弹出窗口
- 17. 当一个子窗口打开时关闭父窗口
- 18. 当matplotlib窗口打开时关闭tkinter进度条窗口
- 19. 如何关闭当前窗口并同时打开新窗口?
- 20. 当用户关闭其中一个窗口时,WPF关闭所有窗口
- 21. 在javascript中关闭父窗口时如何关闭子窗口?
- 22. 在Outlook中制作可折叠的自定义任务窗格?
- 23. Extjs 4.1 - 如何在网格中关闭窗口关闭
- 24. 当另一个窗体关闭时关闭窗体
- 25. 当FireFox自动关闭时关闭插件窗口
- 26. 用于Mac的Outlook中的office office.js加载项任务窗格关闭问题
- 27. 当窗口打开时锁定菜单项,关闭时解锁
- 28. 当用户关闭窗口或浏览器时,jquery任务
- 29. 关闭在javascript中打开的窗口
- 30. 打开和关闭窗口
您是否使用内存分析器检查了您的应用程序?这会让你知道什么物体不会从记忆中释放出来,是找到实际问题的最佳选择。 – DimitarD
我知道用户控件没有被处置 –
你点了多少时间按钮?也许垃圾收集器还没有决定收集内存。 –