【问题标题】:Performance degradation of CreateFile APICreateFile API 的性能下降
【发布时间】:2009-05-28 18:04:09
【问题描述】:

我有一个应用程序正在从库中恢复大量数据。我们使用的是 Windows server 2003。随着进程的进展,我们看到性能下降。我为我的 4 个主要任务添加了一些性能计数器,创建文件、从库中读取、WriteData、关闭文件。我们正在恢复数百万个文件。 我观察到的是 createfile API 的性能随着过程的进行而下降。其他操作一致。

有什么可能导致这种情况的想法吗?

提前感谢所有答案/建议。

问候, 布山

【问题讨论】:

    标签: windows windows-server-2003


    【解决方案1】:

    文件系统是 NTFS 吗?数百万个文件是否进入同一个目录,它们的名称是否相似?来自technet article on NTFS internals

    如果您在一个文件夹中有大量文件(300,000 或更多),并且这些文件的文件名较长且首字母相同,则创建文件所需的时间会增加。增加的原因是 NTFS 将短文件名基于长文件名的前六个字符。在包含超过 300,000 个文件的文件夹中,在 NTFS 使用与长文件名相似的所有 8.3 名称后,短文件名开始发生冲突。生成的短文件名与现有的短文件名反复冲突导致 NTFS 重新生成短文件名 6 到 8 次。

    您可以使用命令行实用程序“fsutil”查询此行为:

    fsutil behavior query disable8dot3
    

    【讨论】:

      【解决方案2】:

      您能否提供一些有关库数据存储位置以及文件创建位置的信息?

      例如,如果您将所有输出文件创建到同一个目录中,您可能会发现 CreateFile 正在变慢,因为它需要检查越来越多的文件名是否存在冲突。

      【讨论】:

        【解决方案3】:

        可能与系统缓存作斗争?您可以查看 CreateFile 的文档中的缓存行为部分。

        【讨论】:

          【解决方案4】:

          我的通灵调试器说你正在泄漏句柄。您是否正在关闭处理所有您正在创建文件的调用?

          【讨论】:

            猜你喜欢
            • 2014-05-19
            • 2013-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多