Очень сложно мне обнаружить утечку памяти, вплоть до того момента когда уже не появляется ошибка OutOfMemoryException, но тут уже и индюку понятно что памяти не хватает...
Как можно заранее узнать что не хватает памяти или что она куда-то утекает?
Очень сложно мне обнаружить утечку памяти, вплоть до того момента когда уже не появляется ошибка OutOfMemoryException, но тут уже и индюку понятно что памяти не хватает...
Как можно заранее узнать что не хватает памяти или что она куда-то утекает?
Ну, во первых, OutOfMemoryException возникает когда памяти уже не хватает и уже "поздно пить боржоми")
шучу.
Распознать утечку памяти можно когда отклик очень замедлен. Это происходит изза того что выполняется обмен с файлом подкачки, расположеным на диске.
Также постепенное увеличение объёма используемой памяти, которое видно в диспетчере задач - это также признак утечки памяти.
Если появляются подозрения, что в приложении есть утечка памяти, то нужно прежде всего определить тип памяти, в котором эта утечка имеет место. Это позволит определить область памяти, на которой нужно сосредоточить внимание и усилия при отладке.
http://www.codenet.ru/progr/cpp/memleaks.php - вот здесь можно почитать про утечку памяти.
"При разработке больших приложений, оперирующих большими объемами информации на первое место при отладке встает проблема обнаружения неправильного распределения памяти. Суть проблемы состоит в том, что если мы выделили участок памяти, а затем освободили не весь выделенный объем, то образуются блоки памяти, которые помечены как занятые, но на самом деле они не используются. При длительной работе программы такие блоки могут накапливаться, приводя к значительному расходу памяти.
Как обнаружить утечку памяти..."
Потенциальные утечки можно обранужить если запускать приложение с профайлером.
Например в Visual Studio есть меню Debug -> Performance Profiler и там можно выбрать Memory Usage, после чего запустится приложение, выполнив действия которые могу привести к утечке памяти делайте Snapshot и изучайте что где и в каких объемах создается и не освобождается.
Спасибо!