私が使用しているSHGetFileInfoW関数に問題があります。SHGetFileInfoW関数の代入
スタートアップ(初期化)時に最初の読み取りが非常に遅く、100msを消費します。
MSDNでは、プロセスがスタックされる可能性があるため、メインスレッドではなくスレッドから読み込む必要があります。
もしあれば、私はアイコンを読むためにいくつかの他の機能を使いたいです。
別のこと。どのように大きなアイコンを読むことが可能です、現在私は32x32(SHGFI_LARGEICON)まで読むことができます
ありがとう!
実際のコード:
procedure TForm1.LoadIcons;
var
Info: TShFileInfo;
Icon: TIcon;
Flags: UINT;
FileName: PAnsiChar;
begin
FileName := '.txt';
Flags := SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_LARGEICON;
Icon := TIcon.Create;
try
SHGetFileInfo(FileName, FILE_ATTRIBUTE_NORMAL, Info,
SizeOf(Info), Flags);
Icon.Handle := Info.hIcon;
Image1.Picture.Assign(Icon);
Image1.Refresh;
finally
DestroyIcon(Info.hIcon);
Icon.Free;
end;
end;
スレッドで実行するだけです。また、起動時にすべてのアイコンを読み込まず、必要に応じて読むだけです。 AsyncCallsは仕事をかなり簡単に完了させるでしょう。 –
問題が初期読み込みにあります。私が最初のアイコンを読むとき、私は80 + msを過ごす。次の20個のアイコンを読むと、別の20msを消費します。 私はAsyncCallsでこれを読んでいます(他のトピックでこれについて議論しました)、それはうまく動作しますが、スピードを上げたいと思っています。 –
実際のコードを表示してください。 –