2014-07-15 58 views
2

我在C#中有一個應用程序,它也用作服務器上的Web應用程序的服務。問題是,當我們關閉應用程序(而不是從Web)時,它保持並顯示在任務管理器中保存所有內存。我們可以從任務管理器中殺死它,但是當它從網絡使用時,每次都會創建一個新進程並保留內存分配。退出後,應用程序停留在內存中

我應該在的OnExit

public void OnExit() 

做到這一點,應該刪除它創建的進程的所有實例,並清除內存。我也做了互操作的清理在我的代碼與

System.Runtime.InteropServices.Marshal.ReleaseComObject(item); 
item = null; 
GC.Collect(); 

請提供一些建議

+2

檢查主線程是否正常退出,然後檢查是否有任何前景線程仍在工作。您可以附加到進程,暫停它並查看任何未退出的用戶線程在「線程」窗口中。 – Alireza

回答

1

以下內容可能與您的進程名稱一起使用,它表示「進程名稱」。不知道這可能是多麼乾淨或高效。 .NET中的GC應該抓住這個過程並最終殺死它,這是.NET和CIL語言的優點之一。

public void OnExit() { 
try { 
    foreach(System.Diagnostics.Process myProc in System.Diagnostics.Process.GetProcesses()) 
      if (myProc.ProcessName == "process name") 
      myProc.Kill(); 
    } catch(Exception ex) {} 
} 
1

基本上,在C#和.NET框架,你不應該來管理內存,但讓框架做爲你。在某個時刻,垃圾收集器將啓動並清理它。不建議手動調用它。如果你來自嚴格的C/C++背景,我知道很難切換心智範例。這個問題已經在許多其他地方得到了回答。

相關問題