0

在本地 Windows 10 机器上使用 VBScript 来自动化一些任务。处理大型二进制文件(500 MB 到 2 GB)。FileSystemObject的文件处理速度非常慢!ADODB速度很快,但会将整个文件加载到内存中,这是一个很大的禁忌,因为我将同时在多个文件(在多个磁盘上)上运行脚本。有什么选择吗?

下面是一个FSO大约需要 26 秒来处理 607 MB 文件的示例。仅跳过 600 MB 就消耗了惊人的 25 秒!

Dim i, f1, f2, dT
Dim objFSO1, objStream1, objFSO2, objStream2

f1 = "OriginalFile.tmp"
f2 = "OutputFile.tmp"

Set objFSO1 = CreateObject("Scripting.FileSystemObject")
Set objStream1 = objFSO1.OpenTextFile(f1, 1)

Set objFSO2 = CreateObject("Scripting.FileSystemObject")
Set objStream2 = objFSO2.OpenTextFile(f2, 8, True)

dT = Timer
For i = 0 To 4
    'Call objStream2.Write(objStream1.Read(1048576))
    Call objStream1.Read(1048576)
Next
dT = Timer - dT
Call WScript.Echo(dT & " seconds so far...")

dT = Timer
Call objStream1.Skip(629145600)
dT = Timer - dT
Call WScript.Echo("Skipping took " & dT & " seconds!")

dT = Timer
Do While Not objStream1.AtEndOfStream
    'Call objStream2.Write(objStream1.Read(1048576))
    Call objStream1.Read(1048576)
Loop
dT = Timer - dT
Call WScript.Echo("Another " & dT & " seconds.")

Call objStream1.Close(): Call objStream2.Close()
Set objStream1 = Nothing: Set objStream2 = Nothing
Set objFSO1 = Nothing: Set objFSO2 = Nothing

如您所见,仅在从磁盘读取数据的同时进行测试,以消除任何由写入磁盘引起的减速的可能性。一样的区别!

4

0 回答 0