IvanB
|
Дата: 26.09.2013
|
|
|
|
Buratino При закрытии робота автоматическая сборка мусора полностью не производится, программа сидит в памяти и приходится её удалять вручную. Во время работы память (8 Гб) засоряется, что даже ведёт к зависанию компьютера и перезагрузке. В книгах по C# пишется, что все процессы очистки производятся автоматически. Соответственно вопрос: как мониторить, выявлять места утечки памяти и правильно закрывать приложение? Верно, платформа сама занимается очисткой памяти, но в некоторых случаях эта подсистема не может отследить утечки, например случай когда, программа создает поток, который в свою очередь использует некий ресурс, Вы или программа можете забыть о том что поток работает, и можете думать, что ресурс уже освобожден в памяти т.к. никем не используется, но на самом деле его использует бесконтрольный поток, и это только пример, на самом деле все может быть гораздо сильнее "закручено". В подобных случаях помогают программы, отслеживающие создание/освобождение ресурсов конкретной программы, например инструмент: ants memory profiler, это очень удобная утилита, помогающая находить утечки памяти.
|
|
|
|
|
Buratino
|
Дата: 26.09.2013
|
|
|
|
IvanB Верно, платформа сама занимается очисткой памяти, но в некоторых случаях эта подсистема не может отследить утечки, например случай когда, программа создает поток, который в свою очередь использует некий ресурс, Вы или программа можете забыть о том что поток работает, и можете думать, что ресурс уже освобожден в памяти т.к. никем не используется, но на самом деле его использует бесконтрольный поток, и это только пример, на самом деле все может быть гораздо сильнее "закручено". В подобных случаях помогают программы, отслеживающие создание/освобождение ресурсов конкретной программы, например инструмент: ants memory profiler, это очень удобная утилита, помогающая находить утечки памяти.
Ну вот допустим я создаю поток thread и после его старта он начинает жить своей закрученной жизнью. Метод, указанный ниже, останавливает всё что он делает и высвобождает ресурсы? Или этого не достаточно, нужно лезть в глубь этого потока и там искать утечки? Код
protected override void OnClosing(CancelEventArgs e)
{
thread.Abort();
base.OnClosing(e);
}
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 26.09.2013
|
|
|
|
Buratino IvanB Верно, платформа сама занимается очисткой памяти, но в некоторых случаях эта подсистема не может отследить утечки, например случай когда, программа создает поток, который в свою очередь использует некий ресурс, Вы или программа можете забыть о том что поток работает, и можете думать, что ресурс уже освобожден в памяти т.к. никем не используется, но на самом деле его использует бесконтрольный поток, и это только пример, на самом деле все может быть гораздо сильнее "закручено". В подобных случаях помогают программы, отслеживающие создание/освобождение ресурсов конкретной программы, например инструмент: ants memory profiler, это очень удобная утилита, помогающая находить утечки памяти.
Ну вот допустим я создаю поток thread и после его старта он начинает жить своей закрученной жизнью. Метод, указанный ниже, останавливает всё что он делает и высвобождает ресурсы? Или этого не достаточно, нужно лезть в глубь этого потока и там искать утечки? Код
protected override void OnClosing(CancelEventArgs e)
{
thread.Abort();
base.OnClosing(e);
}
Если поток уничтожен, т.е. ресурс никем больше не используется (никакая переменная больше не ссылается на значение), то эти данные высвобождаются из памяти.
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 26.09.2013
IvanB Код
protected override void OnClosing(CancelEventArgs e)
{
thread.Abort();
base.OnClosing(e);
}
Если поток уничтожен, т.е. ресурс никем больше не используется (никакая переменная больше не ссылается на значение), то эти данные высвобождаются из памяти. Вот в том то и вопрос: я их все таким образом уничтожил, но тем не менее приложение продолжает сидеть в памяти. Какие ещё есть способы обнаружения утечки, убивания процессов, финализаторов?
|
|
Спасибо:
|
|
|
|
|
support_Edu
|
Дата: 27.09.2013
Покажите ваше приложение, тогда можно будет точно сказать что не так.
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 28.09.2013
support_Edu Покажите ваше приложение, тогда можно будет точно сказать что не так.
Может лучше попробуем решить проблему через TeamViwer? Черкните ваш скайп.
|
|
Спасибо:
|
|
|
|