代码之家  ›  专栏  ›  技术社区  ›  Builder

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

  •  2
  • Builder  · 技术社区  · 11 年前

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

    我应该在OnExit做什么

    public void OnExit()
    

    因此它应该删除它创建的任何进程实例并清除内存。我还在代码中使用

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

    请提供一些建议

    2 回复  |  直到 11 年前
        1
  •  1
  •   C0L.PAN1C    11 年前

    以下内容可能适用于您的进程名称,其中显示“进程名称”。不确定这可能是多么干净或高效。.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) {} 
     }
    
        2
  •  1
  •   Joseph Hou    11 年前

    基本上,在C#和.NET框架中,您不应该管理内存,而是让框架为您管理内存。在某个时候,垃圾收集器会开始清理它。不建议手动调用。我知道如果你来自严格的C/C++背景,很难转换思维模式。这个问题在其他许多地方都得到了回答。