方法1的数字似乎很快,它不在现实生活中,特别是如果我不使用虚拟化列表(即使它很慢)。我在IValueConverter,async中运行它们,它看起来很慢。资源管理器暂时做到但是如何?是否有更快的方式获得相关图标? 到目前为止,我已经尝试过:
方法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;
}
}
执行188ms; (100次迭代)
方法2。
System.Drawing.Icon.ExtractAssociatedIcon(filename);
在661ms执行; (100次迭代)