我在C#中有一个应用程序,它也可以作为服务器上Web应用程序的服务。问题是当我们关闭应用程序(而不是从Web)时,它会保留并显示在任务管理器中,保留所有内存。我们可以从任务管理器中删除它,但是当它从Web使用时,每次创建一个新进程并保持内存分配。
我应该在OnExit上做什么
public void OnExit()
所以它应该删除它创建的任何进程实例并清除内存。我也在使用
在我的代码中进行Interop清理System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
item = null;
GC.Collect();
请提供一些建议
答案 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) {}
}