Тут я буду распологать мои задумки, относящиеся, в основном, к области программирования, но не ограничиваясь ею. Читайте и получайте удовольствие. И оставляйте отзывы в гостевой.
У меня часто возникае такая задача: в программе крутится большой цикл, и нужно внутри цикла аккумулировать данные в строковой переменной.
For i = 1 To N s = s + "DATA" Next
Но такой подход неправильный: код работает крайне медленно. Особенно когда строка разрастается в размерах. Когда-то где-то (=ОБС) я читал. что оператор "&" работает быстрее, чем "+"
For i = 1 To N s = s & "DATA" Next
Как оказалось - нет. А правильнее в таком случае использовать mid(). Делается так (взято с MS):
Dim TestString As String ' Initializes string. TestString = "The dog jumps" ' Returns "The fox jumps". Mid(TestString, 5, 3) = "fox" ' Returns "The cow jumps". Mid(TestString, 5) = "cow" ' Returns "The cow jumpe". Mid(TestString, 5) = "cow jumped over" ' Returns "The duc jumpe". Mid(TestString, 5, 3) = "duck"
Как оказалось, можно ускорить код, применяя строки фиксированной длины. Чтобы оценить скорость работы, написал небольшой код (достаточно просто вставить в новый проект):
'Боев Григорий (ProgrammerForever)(c) 2010
Private Declare Function ApiGetTime Lib "winmm.dll" _ Alias "timeGetTime" () As Long ' Функция apigettime() измеряет промежуток времени с момента запуска Windows. ' Возвращает время с точностью до миллисекунды.
Dim sVar As String ' Строковая переменная для работы (переменная длина) Dim sFix As String * 32767 ' Строковая переменная для работы (фиксированная длина)
Dim Report As String ' Строковая переменная для отчёта Dim t As Long ' Хранилище для времени
MsgBox Report ' Выводим окошечком отчёт Clipboard.SetText Report ' И копируем в буфер обмена End ' Завершаем работу программы
End Sub
Результат:
15:37:23 : Start
15:37:23 : Start 'Конкатенация с помощью + (переменная длина)' 15:37:29 : End 'Конкатенация с помощью + (переменная длина)' Время выполнения: 5422 ms
15:37:29 : Start 'Конкатенация с помощью & (переменная длина)' 15:37:34 : End 'Конкатенация с помощью & (переменная длина)' Время выполнения: 5446 ms
15:37:34 : Start 'Использование mid() (переменная длина)' 15:37:34 : End 'Использование mid() (переменная длина)' Время выполнения: 6 ms
15:37:34 : Start 'Конкатенация с помощью + (фиксированная длина)' 15:37:36 : End 'Конкатенация с помощью + (фиксированная длина)' Время выполнения: 1833 ms
15:37:36 : Start 'Конкатенация с помощью & (фиксированная длина)' 15:37:38 : End 'Конкатенация с помощью & (фиксированная длина)' Время выполнения: 1898 ms
15:37:38 : Start 'Использование mid() (фиксированная длина)' 15:37:38 : End 'Использование mid() (фиксированная длина)' Время выполнения: 4 ms
15:37:38 : End
Надеюсь это кому-нибудь будет полезно. С этого момента буду повсеместно юзать mid() и фиксированные строки.