Очевидно, я не понимаю, как работают конструкторы.
Когда мое приложение запускается, оно автоматически или при необходимости выполняет мою процедуру, которая загружает все ресурсы - в основном, изображения.
procedure Load;
begin
AppPath := GetAppPath;
INI := TInIFile.Create(AppPath + '\Config.ini');
INI.WriteBool('Application', 'Running', True);
ResPath := AppPath + '\Resources';
Top := TPicture.Create;
TopRight := TPicture.Create;
Left := TPicture.Create;
Right := TPicture.Create;
BottomLeft := TPicture.Create;
Bottom := TPicture.Create;
BottomRight := TPicture.Create;
...
//Load the pictures ...LoadFromFile(Skin.ReadString('Skin', ..., ...));
Пока я использовал это приложение, оно начало немного отставать, но ОС тоже зависала и зависала.Я был шокирован, когда увидел мою программу в диспетчере задач:
![MEM](https://i.stack.imgur.com/kgRtR.png)
Если я прав, приложение использовало 600 мегабайт ОЗУ с включенным файлом подкачки.В моей системе всего 1 ГБ ОЗУ, поэтому неудивительно, что ОС запускалась с задержкой из-за использования файла подкачки.
Оказалось, что это была та же самая процедура, которая загружала ресурсы каждый раз, когда я что-то делал,Я исправил это, добавив логическое значение в модуль, и процедура была отменена, когда для него было установлено значение true (означает, что ресурсы загружены).
Loaded: Boolean;
...
if Loaded = False then Load;
Я не понимаю, зачем мне вообще нужно было сделать это изменение,Почему конструктор выделил память для уже созданных объектов?