Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Счётчик.
Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Iska,
У меня ноут 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%.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-12-2020 в 10:57.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:08, 28-12-2020 | #15

Название темы: Счётчик.