У меня ноут 2007 года. HDD заменил на SSD. Отчитываюсь
Прямой перебор
Код:
T = Timer()
Filename = "Z:\Box_Out\aaa.txt"
Nmax = 1000000
With CreateObject("Scripting.FileSystemObject")
Set fOut = .CreateTextFile(Filename, True)
fOut.Close
Set fOut = .OpenTextFile(Filename, 8, False)
For i = 1 To Nmax - 1
fOut.WriteLine CStr(i)
Next
fOut.Write CStr(Nmax)
fOut.Close
End With
MsgBox Timer() - T
Запись блоками
Код:
T = Timer()
Filename = "Z:\Box_Out\aaa.txt"
Nmax = 1000000
Nstep = 100 'Ограничение: NNax должно нацело делиться на Nstep
With CreateObject("Scripting.FileSystemObject")
Set fOut = .CreateTextFile(Filename, True)
fOut.Close
Set fOut = .OpenTextFile(Filename, 8, False)
jMax = Nmax - Nstep + 1
For j = 1 To jMax Step Nstep
If j <> 1 Then
jj = j
ss = ""
Else
jj = 2
ss = "1"
End If
For i = jj To j + Nstep - 1
ss = ss + vbCrLf + CStr(i)
Next
fOut.Write ss
Next
fOut.Close
End With
MsgBox Timer() - T
Код:
1 20,1 сек
10 4,9 сек
50 3,3 сек
100 3,1 сек
200 3,2 сек
500 3,7 сек
1000 5,1 сек
10000 56,0 сек
Можно, наверное, соптимизировать алгоритм, чтобы записывать не одинаковое количество чисел, а приблизительно одинаковое количество байт, но стОит ли?
Наверное, не всё так универсально, тут соотношение производительности процессора и скорости записи в файл важно.
Кстати, скрипт в качестве макроса Excel при записи по 100 чисел выполнился у меня в 2 раза быстрее, а при прямом переборе -всего на 20%.