退出后应用程序停留在内存中

时间:2014-07-15 20:24:36

标签: c# memory-leaks com-interop

我在C#中有一个应用程序,它也可以作为服务器上Web应用程序的服务。问题是当我们关闭应用程序(而不是从Web)时,它会保留并显示在任务管理器中,保留所有内存。我们可以从任务管理器中删除它,但是当它从Web使用时,每次创建一个新进程并保持内存分配。

我应该在OnExit上做什么

public void OnExit()

所以它应该删除它创建的任何进程实例并清除内存。我也在使用

在我的代码中进行Interop清理
System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
item = null;
GC.Collect();

请提供一些建议

2 个答案:

答案 0 :(得分:1)

基本上,在C#和.NET框架中,你不应该管理内存,而是让框架为你做。在某些时候,垃圾收集器将启动并清理它。不建议手动调用它。我知道如果你来自严格的C / C ++背景,很难改变心理范式。许多其他地方的其他地方已经回答了这个问题。

答案 1 :(得分: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) {} 
 }