0

如果每个文件的大小约为 30KB,那么处理约 50,000 个 xml 文件的 VB6 程序的运行速度(就每秒处理的文件数量而言)比每个文件大小约为 4KB 的情况下运行速度快 3 倍是否有意义?如果它确实有意义,我怎样才能加快较小文件的处理速度?

该程序读取每个文件,计算文件的 MD5 哈希值并调用 SQL Server 存储过程来查看具有相同哈希值的文件版本是否已存储在数据库中。如果文件的计算哈希值已经存储在数据库中,则不会进一步处理该文件;该程序只是重复下一个文件。

我一直在测试已经处理到数据库中的大约 50,000 个 xml 文件的批次,所以程序只是循环:获取下一个 xml 文件→</kbd>hash it→</kbd>call Sproc→</kbd>repeat.

我希望该程序在类似大小的小文件批次上运行得更快,但速度要慢得多。

该程序在 64 位 Windows 10 工作站上运行。这些文件存储在工作站的 C:\ 驱动器(SSD)上的单个目录中。SQL Server 在 Windows Server 下的 VM 上运行。

编辑: 我想我已经找到了瓶颈,但我不知道如何解决它。相关的代码如下。瓶颈是由xDOC.async = False语句引起的。如果我删除它,我会立即获得 20 倍的速度提升。 但是删除它会导致文档加载失败错误,因为代码显然无法处理异步文件加载。这可以加速吗?

Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim xDOC As MSXML2.DOMDocument
Dim xPE As MSXML2.IXMLDOMParseError

Set objFolder = objFSO.GetFolder("C:\These are my XML Files")

For Each objFile In objFolder.Files

    Set xDOC = New DOMDocument
    xDOC.async = False    ("THIS LINE IS THE PROBLEM")

    If xDOC.Load(objFile.Path) Then

        /* process the file */

    Else
        Set xPE = xDOC.parseError
        With xPE
            /* set up objFile.Name failed to load error message */
        End With
            /* log error details */
        Set xPE = Nothing
    End If

    Set xDOC = Nothing

Next objFile
4

0 回答 0