Класс процесса запуска утечки памяти - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть программа, которая регулярно запускает другой процесс с функцией Process.Start().

Через несколько часов я могу обнаружить утечку памяти с помощью монитора ресурсов Windows.Я вижу тонны ручек, набранных "Key" на:

"\ REGISTRY \ MACHINE \ SOFTWARE \ Classes.exe"

"\ REGISTRY \ MACHINE \ SOFTWARE \ Classes \ exefile"

" \ REGISTRY \ MACHINE \ SOFTWARE \ Classes \ exefile \ shell \ open "

вот мой код: мой код действительно прост:

            Process streamerProcess = new Process();
            streamerProcess.StartInfo.FileName = SEStreamRequester.StreamerPath;
            streamerProcess.StartInfo.Arguments = parameters;

            try {
                streamerProcess.Start();
                m_streamerPid = streamerProcess.Id;
            }
            catch(Exception e) {
                m_streamerPid = 0;
                throw new System.ComponentModel.Win32Exception(
                    string.Format("Error while start streamer:{0}", e.Message)
                    , e
                );
            }
            finally {
                streamerProcess.Dispose();
            }

где parameters и SEStreamRequester.StreamerPath - строки

Я искал в своем коде, правильно ли я разместил все экземпляры Process, и я так думаю.Как вы подтверждаете, что эти дескрипторы используются экземпляром процесса?Как я могу найти, откуда течет?

Спасибо.

1 Ответ

0 голосов
/ 17 апреля 2019

Я постараюсь сформулировать ответ в контексте, который вы дали.если вы не утилизируете объект Process после того, как закончите, он останется в живых.

Я предлагаю вам использовать Использование для инициализации Процесса.После того, как блок закончится, Использование будет использовать Процесс для вас.

 using (Process process = new Process("Cmd.exe", commandString))
        {
         process.Start();
        }

Пока вы действительно избавились от объекта (ов).сборщик мусора должен сделать все остальное!возможно, проверьте следующий документ: https://docs.microsoft.com/en-us/dotnet/api/system.idisposable.dispose?view=netframework-4.7.2

А этот для получения дополнительной информации о сборке мусора: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/

...