我正在写一个文件pipe理器。 当它打开时,UI会冻结一段时间。 我对它进行了分析,发现慢函数是SHGetFileInfo 。
SHFILEINFO shinfo; SHGetFileInfo(FullPath.c_str(),NULL,&shinfo,sizeof(shinfo),SHGFI_ICON | SHGFI_LARGEICON))
而且,即使有数百个文件夹,程序运行速度也足够快,但至less有一个可执行文件变得非常慢。 我认为从这些文件加载图标是一个繁重的任务,因为资源必须加载。
我发现当Windows资源pipe理器加载一个文件夹时,除可执行文件以外的所有图标都是正确的,并且可执行文件具有其默认图标(命令行工具的图标)。 然后他们的图标在几秒钟内就变得正确了。
我的问题是,Explorer如何确定哪些图标快速加载,哪些图标很慢? 我认为检查扩展名.exe是不可靠的,因为可以执行assoc .foo=exefile或将另一个扩展名的图标设置为%1等。
.htaccess – redirectfavicon
静态生成后,Qt图标不会加载
如何更改Visual Studio 2012(C ++)中的默认.exe图标
我怎样才能取代C#窗体可执行的应用程序图标?
在使用cl.exe进行编译之后/在进行编译时,非交互式地设置.exe的图标
如何在Windows下设置一个Qt程序的图标?
桌面图标在Linux的Ubuntu的QT
在Windows上切换任务时如何设置在Alt-Tab对话框中显示的应用程序图标?
Windows从多图标文件中select错误的图标,并自我渲染以更正大小
Windows shell使用一些机制来处理这个性能命中:
它在后台线程中查找图标。 当这个线程正在工作时,Explorer仍然是完全可用的。
资源管理器缓存图标。 这意味着图标提取只执行一次,结果被记住。
我想如果你想让你的文件管理器和资源管理器一样可用,那么你需要实现类似的优化。 或者也许SHGetFileInfo已经利用了系统图标缓存。
http://blogs.msdn.com/b/oldnewthing/archive/2004/06/01/145428.aspx
http://www.catch22.net/tuts/system-image-list
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。