我们在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
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
以下是正在发生的事情,GetFiles()和GetDirectories()确实使用了索引服务。此外,如果您的索引服务已关闭,这只是意味着它不会自动获取有关文件的数据,但是当您访问该文件(Windows资源管理器/ GetFiles)时,它会将它们编入索引,因此如果您要求使用相同的内容设定的时间量,它不必再次查询硬盘驱动器的目录。
当索引服务打开时,它运行得越来越慢,这是因为Windows知道它无法跟踪计算机上的每个文件。因此,在一段时间后,当您询问该文件时,该文件被认为是陈旧的,索引服务将进行IO调用以获取信息以更新索引数据库。
这个wiki谈论它,只是一点点。不太彻底。