【问题标题】:Does WIndows Search(Win 2008R2)/Indexing Service(Win2003) has any impact on Directory.GetFiles(searchPattern, SearchOption.AllDirectories) method?WIndows Search(Win 2008R2)/Indexing Service(Win2003) 对 Directory.GetFiles(searchPattern, SearchOption.AllDirectories) 方法有影响吗?
【发布时间】:2013-10-17 05:39:07
【问题描述】:

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

在 Win2003 服务器上一切正常。当迁移到 Win2008R2 服务器时,WinForms 应用程序会冻结此方法,并且需要将近 13 分钟才能从通过下载速度带宽为 1Mbps(不是吞吐量)的 VPN 网络连接到文件共享的客户端计算机上打开单个文件。

经过搜索和研究,我们发现 Windows Search 服务没有打开,服务已启动,共享已被索引。我们看到了性能改进,使用 GetFiles 方法打开文件所需的时间从 13 分钟降至 3 分钟。

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

目前我们不确定是哪一个导致了问题?

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

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

【问题讨论】:

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


    【解决方案1】:

    哦,是的,好东西。您会注意到,即使该服务已关闭,运行它两次(彼此相隔很短的时间)第二次运行速度也会快得多。实际上,这里有一个适合你的,运行两次,让第一个运行一分钟。第二个将几乎立即赶上第一个,然后他们将在其余时间都在同一个位置。 (如果我说的有道理的话)。

    这就是发生的事情,GetFiles() 和 GetDirectories() 确实使用索引服务。此外,如果您的索引服务已关闭,这仅意味着它不会自动获取有关文件的数据,但是当您访问文件(Windows 资源管理器/GetFiles)时,它会为它们编制索引,因此如果您使用设置的时间量,它不必再次查询硬盘驱动器的目录。

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

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

    【讨论】:

    • 您好史蒂夫,感谢您的详细回答。信息量很大。索引服务确实发挥了至关重要的作用。但也增加了问题的不一致的网络速度。至此,问题已暂时解决,我们可能会在未来寻找更好的文件和文件夹处理实现方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2021-12-04
    • 2017-07-14
    • 2022-01-01
    • 2011-10-02
    相关资源
    最近更新 更多