Есть ли простой способ в C# обнаружить утечку памяти в процессе ?
Всем Привет.
Основываясь на system. diagnostics. process, я задаюсь вопросом, нельзя ли было бы контролировать использование памяти процессом и определить, растет ли память не так, как ожидалось ?
Это делается для того, чтобы иметь возможность вызывать gc.collect() при определенных условиях памяти.
Каково Ваше мнение на этот счет ?
Заранее большое вам спасибо.
С уважением.
Мики
Что я уже пробовал:
В настоящее время я использую gc.Collect, но я хотел бы настроить его в зависимости от состояния рабочей памяти.
Andy Lanng
Мусор собирается довольно регулярно и без подсказки. Утечка памяти в .Net довольно сложна, я имею в виду, что вы действительно должны попытаться утечь память.
Вы можете проверить приложение как запущенный процесс, но вам придется опросить этот процесс, чтобы получить обновления о его текущем использовании.
Основы сбора мусора
SuperMiQi
Привет Энди,
Большое вам спасибо за ваш ответ.
В настоящее время у меня есть процесс мониторинга, запущенный во время работы моего основного приложения.
Я думал добавить метод в это моноторное приложение, чтобы проверить, правильно ли работает рабочий набор и частная память. Когда критерий будет достигнут, я смогу вызвать gc. collect.
Может быть, я слишком много думаю.
А ты как думаешь?
Заранее большое вам спасибо.
С уважением.
Мики
[no name]
Почему вы думаете, что вам вообще нужно возиться с GC? Он очень хорошо справляется со своей работой, оптимизируясь на протяжении многих лет. У вас не должно быть никаких причин возиться с ним. Просто позволь ему делать свою работу.
Philippe Mori
Исправьте утечки памяти, если они у вас есть (с помощью профилировщика памяти), и, как уже было предложено, не связывайтесь со сборщиком мусора...
SuperMiQi
Спасибо вам за ваш большой вклад.
Philippe Mori
Иногда вам просто нужно посмотреть на использование памяти под отладчиком при использовании вашего приложения.
Foothill
Утечка памяти В а .Сетевое приложение не так уж сложно в зависимости от того, что вы используете. Например, любой класс, реализующий интерфейс IDisposable, является потенциальной точкой утечки памяти. Самый простой способ, который я нашел, - это утечка памяти .Net заключается в создании объектов, основанных на конструкциях операционной системы, также известных как дескрипторы Win32 в C &C++, и не вызывающих Dispose (), когда они больше не нужны. Лучшее, что вы можете сделать, это избавиться от всех IDisposable объектов.