特にリストに仮想化を使用していない場合(遅い場合でも)、実際にはそうではありません。IValueConverter、非同期で実行していますが、非常に遅く見えます。エクスプローラーは一時的にそれを行いますが、どのようにしますか? 関連付けられたアイコンを取得するさらに高速な方法はありますか? これまでのところ、私は試しました:
方法 1:
ExtractIcon.GetIcon(filename, true);
どこ
public static System.Drawing.Icon GetIcon(string strPath, bool bSmall)
{
SHFILEINFO info = new SHFILEINFO(true);
int cbFileInfo = System.Runtime.InteropServices.Marshal.SizeOf(info);
SHGFI flags;
if (bSmall)
{
flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;
}
else
{
flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes;
}
SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);
try{
return System.Drawing.Icon.FromHandle(info.hIcon);}
catch{
return null;
}
}
188 ミリ秒で実行されます。(100回の繰り返し)
方法 2。
System.Drawing.Icon.ExtractAssociatedIcon(filename);
これは 661ms で実行されます。(100回の反復)