Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272

Как правильно уничтожать Tframe

25.09.2015, 06:37. Показов 4760. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток.
Прошу помочь.
В проекте при нажатии на кнопку динамически создаётся новая страница на TPageControl.
И на эту страницу помещается динамически созданный Tframe (на котором лежит TSynEdit, 2 TdbGridEh, Toraquery, TOraSession, TOraDataSource... в общем много всякой фигни).
Когда я нажимаю кнопку, TTabSheet и фрейм со своим содержимым должны удалиться и освободить оперативную память.
Но если после создания фрейма память, занятая приложением увеличивается на 1МБ (смотрю в Диспетчере Задач), то при закрытии уменьшается примерно на 100КБ. Т.е. 900КБ остаются где-то висеть.

Вот процедура удаления:
Delphi
1
2
3
4
for i:= 0 to frame1.ControlCount-1 do
   frame1.Components[i].Free;//удаляю все компоненты на фрейме (не знаю, уничтожаются ли они автоматом  при уничтожении фрейма)
   frame1.Free; //уничтожаю сам фрейм
   PageControl1.ActivePage.Free; //уничтожаю текущую страницу, которая создавалась специально для фрейма.
Скажите, пожалуйста, что я делаю не так?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2015, 06:37
Ответы с готовыми решениями:

TFrame в TFrame Rad
Доброго времени суток. Есть достаточно емкий VCL проект, для удобства разбил его на части при помощи TFrame. Далее решил не...

Как создать TFrame в XE3
Как в новых Delphi создать новый фрейм? В меню File > New не обнаруживается ни Delphi Projects, ни Delphi Files. Через File > New...

Как вручную уничтожать массивы, зная, что они уже не нужны программе
Помогите разобраться. Программа выдает ошибку "System.OutOfMemoryException" на строку string MX= new string ; где hsize = 317; ...

8
 Аватар для Storm Screamer
4852 / 1419 / 116
Регистрация: 21.04.2013
Сообщений: 8,618
25.09.2015, 06:52
Памяти - то разные бывают... диспетчер задач какую показывает память?
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
25.09.2015, 09:50
Вообще, для удаления достаточно одной 4-й строчки.
Попробуй несколько раз вкладку создать/удалить и посмотри что будет с памятью происходить.
1
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
25.09.2015, 10:34  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Попробуй несколько раз вкладку создать/удалить и посмотри что будет с памятью происходить.
С каждым созданием/удалением вкладки память увеличивается и увеличивается. Получается, если долго работать в проге, она постепенно скушает всю память и не подавится
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
25.09.2015, 11:37
Цитата Сообщение от FIL Посмотреть сообщение
Вообще, для удаления достаточно одной 4-й строчки.
Не факт. Зависит от того кто владелец всего этого барахла.
1
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
25.09.2015, 11:53
Лучший ответ Сообщение было отмечено ProRockX как решение

Решение

смотри код создания фрейма
1)
если
frame1:=TMyFrame.Create(NewTabSheet);
то
NewTabSheet.Free;
освободит и сам фрейм
и больше ничего делать не нужно
2)
вдруг в самом фрейме создается и не освобождается что-то
1
 Аватар для ProRockX
263 / 109 / 26
Регистрация: 16.03.2013
Сообщений: 272
25.09.2015, 16:30  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
смотри код создания фрейма
1)если
frame1:=TMyFrame.Create(NewTabSheet);
то
NewTabSheet.Free;
освободит и сам фрейм
и больше ничего делать не нужно
Мдааа, у меня было так:
Delphi
1
frame1:=TMyFrame.Create(self);
Исправил и тут при создании вкладки тоже. При удалении делаю Free только вкладке, всё хорошо.
Цитата Сообщение от krapotkin Посмотреть сообщение
2)вдруг в самом фрейме создается и не освобождается что-то
Открыл юнит с фреймом, запустил поиск по слову Create. Действительно нашёл 1 стринглист, который объявлялся в процедуре локально, создавался, но не уничтожался. Правильно ли я понимаю, он остаётся висеть в памяти?
Больше явных созданий чего-либо без последующего Free в юните фрейма и в тексте процедур других юнитов, которые вызываются из фрейма, я не нашёл.
Куда-бы дальше копнуть?
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,667
Записей в блоге: 21
25.09.2015, 20:58
если больше нет, то течь не должно
1
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
26.09.2015, 01:28
Цитата Сообщение от ProRockX Посмотреть сообщение
Правильно ли я понимаю, он остаётся висеть в памяти?
Правильно. Стринглист не имеет владельца, так что никто его автоматически не уничтожит.
Сам создал - сам и уничтожай.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2015, 01:28
Помогаю со студенческими работами здесь

Как сделать так, чтобы в программе можно было уничтожать динамические переменные с помощью dispose?
Помогите сделать ток чтоб в программе можно было уничтожать динамические переменные с помощью dispose unit Unit2; interface ...

Как лучше - создавать и уничтожать несколько команд или каждый раз просто менять свойство команды
У меня несколько команд: 1) запрос к одной таблице; 2) очистка второй таблицы; 3) вставка данных во вторую таблицу Вот тут в примере...

Как уничтожать динамические объекты и вообще объекты, если это необходимо сделать в их процедурах?
Создать отдельную процедуру CloseObject(Object: TObject) и вызывать ее в конце процедуры или так тоже нельзя? А то бесят эти access...

Tframe
Есть несколько созданых фреймов, как сделать чтобы выводился определенный фрейм в зависимости от нажатой кнопки, например, при нажатии на...

Использование TFrame
Добрый день. Уже давно пользуюсь фреймами в стиле -> создаю отдельный фрейм для каждой страницы pagecontrol(весь дизайн и код делаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru