Я работаю над приложением winform в C #, которое запускает другие программы.
Работает довольно хорошо.
Но я замечаю, что он замедляется после некоторых запусков. Итак, я контролировал темы и обнаружил, что:
_windowsProcess.BeginOutputReadLine();
_windowsProcess.BeginErrorReadLine();
Создает две темы. Это нормально, поскольку я использую это для получения некоторой информации с обработчиками событий, поскольку мне нужны асинхронные журналы.
Когда мой процесс убит (каким бы он ни был), я использую:
_windowsProcess.CancelOutputRead();
_windowsProcess.CancelErrorRead();
Я надеялся, что это убьет мои два лишних потока, но это не так. Когда я читаю MSDN, он говорит, что перестает обрабатывать события, но если я снова использую BeginOuputReadLine, я мог бы повторно использовать буфер. Так что я предполагаю, что это означает: «мы не убиваем потоки».
Мне это не нужно, и я не хочу убивать свои процессы, это обходной путь?
Кстати, даже если я удаляю буфер, делаю:
_windowsProcess.OutputDataReceived -= new DataReceivedEventHandler(OnDataReceived);
_windowsProcess.ErrorDataReceived -= new DataReceivedEventHandler(OnDataReceived);
У меня такая же проблема.
Заранее спасибо!