| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Уничтожение формы и освобождение памяти |
| Автор: naparNIK 27.6.2012, 17:59 | ||||
| Есть две формы (первая создается автоматически, вторая - "вручную"). После закрытия второй формы память не освобождается, нашёл в гугле такой пример: Форма 1
Форма 2
Проблема в том, что в программе, скомпилированной на Delphi 7 все работает нормально, память освобождается, а на XE2 - нет |
| Автор: Illusion Dolphin 27.6.2012, 19:22 | ||
У меня всё освобождается. А что именно не освобождается? Поробуйте включить в файл проекта ReportMemoryLeaksOnShutdown :
У меня на XE2 при 32/64 всё хорошо, утечек никаких нету. |
| Автор: naparNIK 27.6.2012, 19:32 |
| При открытии второй формы потребляемая программой память возрастает. При закрытии - должна освобождаться. Но на ХЕ2 например, как было 1300 Кб после открытия второй формы так и осталось после её уничтожения. caFree - ведь должно освобождать память при закрытии? |
| Автор: Illusion Dolphin 27.6.2012, 19:39 |
| Она и освобождается, просто Вы не то меряете и не тем. Скорее всего Вы меряете по диспетчеру задач, который показывает вообще виртуальную память процесса, а не физическое использование памяти. |
| Автор: naparNIK 27.6.2012, 19:49 |
| А что и чем мерять? |
| Автор: Illusion Dolphin 27.6.2012, 19:54 |
| Ну как минимум Process Explorer показывает более детальную информацию в разделе Perfomance. Различие между Delphi7/XE2 в абсолютно разном менеджере памяти - новые делфи используют FastMM, вероятно новый менеджер памяти не выделяет физическую память т.к. высвободилось совсем немного (это очень затратная по ресурсам операция). Думаю, высвобождение будет заметно при больших объёмах памяти. |
| Автор: naparNIK 27.6.2012, 20:17 | ||||
Я так и не нашёл его. А чем отличаются Private Bytes от Working Set? Private Bytes - это то, что показывает диспетчер задач (частный рабочий набор), да? |
| Автор: CodeMonkey 27.6.2012, 20:45 |
| naparNIK, http://www.gunsmoker.ru/2009/05/blog-post_24.html. Там всё написано - и почему так происходит, и чем мерять, и когда кричать караул, а когда - не надо. |
| Автор: AlekXL 28.6.2012, 03:22 |
| вообще , встроенный менеджер памяти не всегда отдает память системе, когда ты ее освобождаешь. У него есть свой кэш. Это если речь о небольшом блоке. |