vbscript - ForWriting 和 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 只是将内容添加到末尾。如果您在每次运行之前手动删除文件,那么时间差会很奇怪。我想知道是否在每次 WriteLine 调用时都会发生覆盖,这里的文档不是很具体。
但是,由于许多 WriteLine 调用,两者都有相当大的开销。您可以连接 RAM 中的字符串,并且只执行一次 Write() 即可获得性能。甚至使用 ADODB.Stream 对象。这对于 Unicode 文件也更可靠。
推荐阅读
- android - 如何在屏幕外定位 ConstraintLayout 的子项(以便稍后在屏幕上翻译它们)?
- node.js - 如何使用 webpack 4 成功构建带有 pug 模板引擎的 NodeJS 项目
- javascript - JS Cookie 根据用户显示/隐藏表单
- javascript - 使用 .reduce() 对 Javasript 数组进行从宽到长的转换会产生空数组
- angular - pathType.isDirectory 中的错误不是函数
- spreadsheet - 我们如何从电子表格中的文本和数字数据中提取数字?
- python - 根据条件从数据框中创建列表列表
- javascript - 每次递归复制数组好不好?
- javascript - 如何在另一个 javascript 中创建然后使用自己的函数
- javascript - Firestore:在集合中的前 3 个用户上运行事务