while循环中的内存泄漏

Bal*_*i C 2 c# memory-management while-loop

我在while循环中运行一些代码以确保程序始终运行.如果程序没有运行,它会启动它,如果程序不存在,它会从备份中复制它然后启动它,没什么特别的:

while (true)
{
    Process backup = new Process();
    ProcessStartInfo check = new ProcessStartInfo(file);
    if (Process.GetProcessesByName(file).Length == 0)
    {
        if(File.Exists(file))
        {
            backup.StartInfo = check;
            backup.Start();
        }
        else if (!File.Exists(file))
        {
            File.Copy(backupFile, file);
            Thread.Sleep(250);
            backup.StartInfo = check;
            backup.Start();
        }
    }
    backup.Close();
    Thread.Sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)

问题是在每个循环之后,ram的使用量增加了大约100KB,这并不是我所知道的很多,但是如果它运行了一个小时左右就会引起很大的问题.

我试过暂停它并.Close()在过程中使用但没有快乐.任何想法都非常感谢.

Dar*_*con 10

  1. 将这些行放在if语句中,这样就不会执行它们,除非进程没有运行:

    Process backup = new Process();
    ProcessStartInfo check = new ProcessStartInfo(file);
    
    Run Code Online (Sandbox Code Playgroud)
  2. Process实现开始IDisposable,您可以将其包装在using语句中,如Oded建议的那样.

  3. 您没有实际的内存泄漏.垃圾收集器运行时,内存将被回收.如果临时内存使用有问题,您可以强制GC运行,但我认为一旦您执行#1,您也不会遇到临时内存使用问题.