2010-06-24 61 views
1

我已经创建了一个COM DLL来为文件/文件夹应用覆盖图标。COM DLL - 覆盖图标

如果我打开一个文件夹,每个文件都会调用IsMemberOf()函数。我可以根据文件状态通过在运行时查询数据库来确定是否为特定文件设置图标。 (我会更新文件状态在数据库中说修改/添加类似的东西)

似乎,它是昂贵的,非常慢查询目录中的每个文件。因此,我决定查询第一个文件(从数据库中获取目录中的所有文件状态并存储在内存中),然后使用该文件处理剩余的文件列表。

为此,我想知道是否所有文件都在IsMemberof函数中完全处理。一旦处理完所有文件,我就可以清理内存。如果浏览器再次刷新,我可以再次查询数据库的文件状态。

有没有办法确定所有文件在IsMemberof函数中处理。或者还有其他方法可以简单地做到这一点。

感谢,

回答

1

我会想你实际上是在谈论一个外壳扩展处理程序和IShellIconOverlayIdentifier接口。

是的,IsMemberOf方法将被频繁调用。如果你的代码需要大量时间来查询数据库,你必须保持活跃或者用户在Explorer中会遇到不良行为。不,你不能假定下一次调用会通过一个路径指向与前一个文件夹相同的文件夹,只是它可能会这样做。

要刷新缓存,如果您看到文件夹名称已从先前的调用中更改,则可能会得到合理的行为。另一个策略是跟踪缓存项目的年龄。当缓存填满时扔掉旧的。这将有助于用户在文件夹之间来回切换,而不是一种不常见的操作。