WIndows Search(Win 2008R2)/索引服务(Win2003)对Directory.GetFiles(searchPattern,SearchOption.AllDirectories)方法有什么影响吗?

时间:2013-10-17 05:39:08

标签: vb.net winforms io windows-search indexing-service

我们在Directory.GetFiles方法尝试从Win2008R2 VMServer上的UNC文件夹共享(NTFS磁盘)搜索Word文档时遇到一个奇怪的问题。共享包含父文件夹中的10K以上文件和子目录中的75K文件。

在Win2003 Server中一切正常。当迁移到Win2008R2服务器时,WinForms应用程序会冻结此方法并花费将近13分钟从连接到文件共享的客户端计算机打开单个文件,该网络具有1Mbps的下载速度带宽(非吞吐量)。

搜索后&研究,我们意识到Windows搜索服务没有打开,服务已启动,共享已编入索引。我们看到了性能提升,使用GetFiles方法打开文件所花费的时间从13分钟缩短到3分钟。

但这并不一致。在带宽远低于1MBPS(比如0.5 MBPS)的白天,打开文档的时间跨度再次在8-12分钟之间。

此时我们不确定是哪一个导致问题?

不可能的解决方案: 1)创建多个目录和组织文件。 2)增加带宽。 3)使用直接文件路径而不是Directory.GetFiles / EnumerateFiles

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

噢,好的东西。您会注意到,即使服务已关闭,运行两次(彼此之间的短暂连接)也会在第二次运行得更快。实际上,对你来说这是一个很好的,运行两次,让第一个运行一分钟。第二个将几乎立即赶上第一个,然后他们将在其余时间都在同一个位置。 (如果我说的话有意义的话)。

以下是正在发生的事情,GetFiles()和GetDirectories()确实使用了索引服务。此外,如果您的索引服务已关闭,这只是意味着它不会自动获取有关文件的数据,但是当您访问该文件(Windows资源管理器/ GetFiles)时,它会将它们编入索引,因此如果您要求使用相同的内容设定的时间量,它不必再次查询硬盘驱动器的目录。

当索引服务打开时,它运行得越来越慢,这是因为Windows知道它无法跟踪计算机上的每个文件。因此,在一段时间后,当您询问该文件时,该文件被认为是陈旧的,索引服务将进行IO调用以获取信息以更新索引数据库。

这个wiki谈论它,只是一点点。不太彻底。