Как улучшить время загрузки Delphi TPngImageList (или TImageList)
Я использую в своем приложении около 100 иконок, доступ к которым осуществляется с использованием фиксированных номеров ссылок, и эти номера также доступны для выбора пользователем значка. Требуются три разрешения: 16x16, 32x32 и 48x48. Каждое из этих разрешений содержится в TPngImageList, и я создал "библиотеку значков" с использованием TDataModule, которая содержит эти три списка изображений (TArtImageLibraryImageLists). Простой метод "создать при первом использовании" создает экземпляр этого TDataModule, когда требуется любой из его списков изображений. Свойство LargeImages или somesuch любых элементов управления, которым требуется доступ к списку изображений, просто задается путем вызова требуемой функции разрешения.
Проблема заключается в времени загрузки программы при запуске, которое составляет около 1 с на быстрой машине. Очевидно, худшим виновником является список изображений 48x48, но мне интересно, есть ли лучший механизм загрузки (например, с использованием файла ресурсов?), Который ускорит процесс. Или есть способ, которым я могу переформатировать списки изображений? Мне все еще понадобится TImageList во время выполнения, например, для моего TreeView и т. Д.
Спасибо, Брайан.
var
FInstance : TArtImageLibraryImageLists;
function ArtImageLibraryImageLists : TArtImageLibraryImageLists;
begin
If not Assigned( FInstance ) then
FInstance := TArtImageLibraryImageLists.Create( nil );
Result := FInstance;
end;
function ArtIconLibraryImageList16 : TImageList;
begin
Result := ArtImageLibraryImageLists.ImageList16;
end;
function ArtIconLibraryImageList32 : TImageList;
begin
Result := ArtImageLibraryImageLists.ImageList32;
end;
function ArtIconLibraryImageList48 : TImageList;
begin
Result := ArtImageLibraryImageLists.ImageList48Shadow;
end;
1 ответ
- Вы говорите "простой метод" создать при первом использовании ", создающий экземпляр этого TDataModule", но затем говорите, что проблема в времени запуска. Когда модуль данных создается на самом деле?
- Вы профилировали приложение, чтобы убедиться, что список изображений загружает проблему?
- Если проблема на самом деле в списке изображений, вам нужны pngs? Если они хранятся как таковые, их необходимо декодировать и добавить в растровое изображение списка изображений. ImageList_LoadImage() может загрузить растровое изображение за один шаг.