gpt4 book ai didi

windows - 我怎么知道下一个 SHGetFileInfo (SHGFI_ICON) 调用是否会很慢(对于 exe 文件等)?

转载 作者:可可西里 更新时间:2023-11-01 11:53:37 25 4
gpt4 key购买 nike

我正在写一个文件管理器。当它打开时,用户界面会卡住一段时间。我分析了它,发现慢函数是 SHGetFileInfo

SHFILEINFO shinfo;
SHGetFileInfo(FullPath.c_str(), NULL, &shinfo, sizeof(shinfo),
SHGFI_ICON | SHGFI_LARGEICON))

此外,即使有数百个文件夹,该程序运行速度也足够快,但当至少有一个可执行文件时,它会变得非常慢。我认为从这些文件加载​​图标是一项繁重的任务,因为必须加载资源。

我看到当 Windows 资源管理器加载文件夹时,除可执行文件外的所有图标都是正确的,并且可执行文件具有其默认图标(命令行实用程序的图标)。然后他们的图标会在几秒钟内变得正确。

我的问题是 Explorer 如何确定哪些图标加载速度快,哪些图标加载速度慢?我认为检查扩展名 .exe 是不可靠的,因为人们可能会执行 assoc .foo=exefile 或将另一个扩展名的图标设置为 %1,等

最佳答案

Windows shell 使用几种机制来处理这种性能损失:

  1. 它在后台线程中查找图标。在此线程执行其工作时,Explorer 仍然可以完美使用。
  2. Explorer 缓存图标。这意味着图标提取仅执行一次并记住结果。

我认为如果您希望您的文件管理器像 Explorer 一样好用,那么您将需要实现类似的优化。或者 SHGetFileInfo 可能已经利用了系统图标缓存。

这些与 shell 图标性能相关的文章可能对您有用:

关于windows - 我怎么知道下一个 SHGetFileInfo (SHGFI_ICON) 调用是否会很慢(对于 exe 文件等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23077457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com