ForWriting 和 ForAppending VBS 的区别
Difference between ForWriting and ForAppending VBS
我有以下生成数组并将其写入文本文件的代码。
当我使用ForAppending 模式打开文件时,它会在60 秒内写入文件。
当我使用ForWriting 模式时,它写得很慢。
谁能解释为什么 ForAppending 模式比 ForWriting 快得多?
谢谢。
Dim objFSO, objTextFile
Dim strFile
strFile = "U:\Summers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile _
(strFile, ForAppending, True)
imax = 10000000
a = array()
t0 = timer 'Standard array
Redim a(imax)
For i = 0 To imax
a(i) = strline
Next
msgbox "Array ready."
for i = 0 to ubound(a)
objTextFile.WriteLine(a(i) & vbCrLf)
next
objTextFile.Close
s = s & "[Array " & FormatNumber(timer - t0, 3, -1) & "]" & vbCRLF
Set a = Nothing
MsgBox s
我猜是因为 ForWriting 打开一个文件并覆盖它的内容,而 ForAppending 只是写入文件的末尾,而没有覆盖。
ForWriting 覆盖现有文件,而 ForAppending 只是将内容添加到末尾。如果你在每个运行之前手动删除文件,那个时间差就很奇怪了。我想知道覆盖是否可能在每次 WriteLine 调用时发生,这里的文档不是很具体。
但是,由于有很多 WriteLine 调用,两者都有相当大的开销。您可以在 RAM 中连接字符串,并且只执行一次 Write() 以获得性能。或者甚至使用 ADODB.Stream 对象。这对于 Unicode 文件也更可靠。
我有以下生成数组并将其写入文本文件的代码。
当我使用ForAppending 模式打开文件时,它会在60 秒内写入文件。
当我使用ForWriting 模式时,它写得很慢。
谁能解释为什么 ForAppending 模式比 ForWriting 快得多?
谢谢。
Dim objFSO, objTextFile
Dim strFile
strFile = "U:\Summers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
' ForAppending = 8 ForReading = 1, ForWriting = 2
Const ForAppending = 8
Set objTextFile = objFSO.OpenTextFile _
(strFile, ForAppending, True)
imax = 10000000
a = array()
t0 = timer 'Standard array
Redim a(imax)
For i = 0 To imax
a(i) = strline
Next
msgbox "Array ready."
for i = 0 to ubound(a)
objTextFile.WriteLine(a(i) & vbCrLf)
next
objTextFile.Close
s = s & "[Array " & FormatNumber(timer - t0, 3, -1) & "]" & vbCRLF
Set a = Nothing
MsgBox s
我猜是因为 ForWriting 打开一个文件并覆盖它的内容,而 ForAppending 只是写入文件的末尾,而没有覆盖。
ForWriting 覆盖现有文件,而 ForAppending 只是将内容添加到末尾。如果你在每个运行之前手动删除文件,那个时间差就很奇怪了。我想知道覆盖是否可能在每次 WriteLine 调用时发生,这里的文档不是很具体。
但是,由于有很多 WriteLine 调用,两者都有相当大的开销。您可以在 RAM 中连接字符串,并且只执行一次 Write() 以获得性能。或者甚至使用 ADODB.Stream 对象。这对于 Unicode 文件也更可靠。