我正在開發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
我知道用戶控件沒有被處置 –
你點了多少時間按鈕?也許垃圾收集器還沒有決定收集內存。 –