У меня есть программа, которая работает в фоновом режиме и периодически убивает процесс. Я использую простой цикл с вызовом Thread.Sleep (). Чтобы убить процесс, я делаю это:
Dim arrProcess As Process()
arrProcess = Process.GetProcessesByName("x")
For Each RunningProcess As Process In arrProcess
RunningProcess.Kill()
Next
Проблема в том, что массив процессов не собирается сборщиком мусора. Я пробовал:
For Each p As Process In arrProcess
p = Nothing
Next
arrProcess = Nothing
GC.Collect()
Но безрезультатно .... Я бы подумал, как только массив процессов выйдет из области видимости (т. Е. Закончится итерация цикла), VB.NET сможет собирать мусор ... Вместо этого эта простая программа легко начинает использовать гигабайты памяти, если я оставляю ее работать часами (это мое предназначение).
Не спрашивайте, что я пытаюсь убить ;-) Вопрос только в том, почему здесь утечка памяти.
И да, я работаю в Режим выпуска , а не в режиме отладки.