Как улучшить время загрузки Delphi TPngImageList (или TImageList) - PullRequest
0 голосов
/ 28 октября 2010

В моем приложении используется около 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 Ответ

0 голосов
/ 28 октября 2010
  1. Вы говорите «Простой метод« создать при первом использовании », создающий экземпляр этого TDataModule», но затем говорите, что проблема в времени запуска.Когда модуль данных создается на самом деле?
  2. Вы профилировали приложение, чтобы убедиться, что список изображений загружает проблему?
  3. Если проблема на самом деле в списке изображений, вам нужны pngs?Если они хранятся как таковые, их необходимо декодировать и добавить в растровое изображение списка изображений.ImageList_LoadImage () может загрузить растровое изображение за один шаг.
...