以下是 3 次测试的结果:
VBA_Lib - Size: 410 Mb, Time: 11.597 sec
FSO_Asc - Size: 371 Mb, Time: 20.241 sec
FSO_Uni - Size: 743 Mb, Time: 19.822 sec
编码
Option Explicit
Private Const ITERATIONS = 10000000
Private Const TEST_STRING = "This text file was created using "
Private fso As FileSystemObject 'Requires reference to Microsoft Scripting Runtime
Public Sub WriteToTextFile_FirstWay()
Const FILE_TYPE = "VBA_Lib"
Const FILE_NAME = "D:\" & FILE_TYPE & ".txt"
Const FILE_TEXT = TEST_STRING & FILE_TYPE & "."
Dim i As Long, t As Double
Set fso = New FileSystemObject
t = Timer
Open FILE_NAME For Output As #1 'Encode in UTF-8
For i = 1 To ITERATIONS
Print #1, FILE_TEXT
Next
Close #1
ShowResult FILE_TYPE, FILE_NAME, t
End Sub
Public Sub WriteToTextFile_SecondWay()
Set fso = New FileSystemObject
TestFSO False 'Encode in UTF-8
TestFSO True 'Encode in UCS-2 LE-BOM
End Sub
Private Sub TestFSO(Optional ByVal asUnicode As Boolean = False)
Const FILE_TYPE = "FSO"
Const FILE_NAME = "D:\" & FILE_TYPE
Const FILE_TEXT = TEST_STRING & FILE_TYPE & "."
Dim i As Long, t As Double, fsoFile As TextStream, fName As String, isASC As String
isASC = IIf(asUnicode, "Uni", "Asc")
fName = FILE_NAME & "_" & isASC & ".txt"
t = Timer
Set fsoFile = fso.CreateTextFile(fName, True, asUnicode)
For i = 1 To ITERATIONS
fsoFile.WriteLine FILE_TEXT
Next
fsoFile.Close
ShowResult FILE_TYPE & "_" & isASC, fName, t
End Sub
Private Sub ShowResult(ByVal fType As String, ByVal fName As String, ByVal t As Double)
Dim msg As String
msg = fType & " - Size: " & fso.GetFile(fName).Size \ 1048576 & " Mb"
Debug.Print msg & ", Time: " & Format(Timer - t, "0.000") & " sec"
End Sub
文件系统对象方法(MSDN)