#delphi #memory #memory-leaks #fastmm
#delphi #память #утечки памяти #fastmm
Вопрос:
После того, как мы потратили время с FastMM4 на устранение любых фрагментов кода, которые могли бы вызвать утечку памяти, как указано в FastMM4, мы около месяца безостановочно тестировали наше программное обеспечение в Windows 7. Это то, что я вижу до сих пор в диспетчере задач для моего программного процесса.
> -CPU started out at 1% and 0%. Now it is bouncing around from 2% to 5%
> -VM usage started out at 11,852KB. Now it is at 4,900kb but bouncing
> around from 4,900kb to 5,000kb.
Означает ли это, что у нас утечка памяти в нашем программном обеспечении? Я в замешательстве и обеспокоен.
Заранее спасибо,
Комментарии:
1. Мне не кажется, что об этом стоит беспокоиться.
Ответ №1:
Это звучит как довольно нормальное использование памяти. Программа делает что-то, для чего требуется память, и использование памяти увеличивается. Программа завершает то, что она делает, и освобождает память, а использование памяти снижается. Утечка памяти — это когда использование памяти увеличивается и продолжает увеличиваться, потому что вы не освобождаете память, как только закончите с ней.
Если у вас есть FastMM4, вам не нужно искать вещи, которые могут вызвать утечку памяти. Просто включите режим полной отладки и опцию ведения журнала, и программа обнаружит любую утечку памяти при вашем запуске и запишет для вас файл с типами и трассировками стека.
Комментарии:
1. И вам не следует использовать режим полной отладки в релизной версии, потому что FastMM4 нужна сама память, чтобы отслеживать все «стеки вызовов выделения».
Ответ №2:
Нет, когда использование памяти увеличивается и в конечном итоге ваше приложение использует всю доступную память, у вас возникает утечка памяти и повод для беспокойства.
Ответ №3:
Даже если приложение, кажется, работает нормально в течение нескольких дней, все еще могут быть утечки памяти, скрытые в областях кода, которые не используются (или не часто). Таким образом, они могут стать проблемой, когда эта часть приложения станет активной некоторое время спустя.
Чтобы убедиться, что весь код проверен на наличие утечек, вы можете использовать FastMM4 с модульными тестами (с DUnit), гарантируя выполнение как можно большего числа путей кода. Охват кода модульного тестирования можно измерить, например, с помощью этого инструмента Delphi с открытым исходным кодом или Discover, который недавно стал открытым исходным кодом.
Кроме того, DUnit в магистральной версии (9.4.0) поддерживает автоматическое обнаружение утечки памяти (на основе FastMM4) для каждого тестового примера.
Ответ №4:
Может быть, стоит подумать об отладчике? Я понял, что вы ими не пользуетесь. У меня также были проблемы с утечками памяти. Я просто не догадывался об этом. Теперь используйте «хранителя» утечек — для меня это стало deleaker. А вы можете поискать такой, который вам понравится.