Показать сообщение отдельно
Старый 17.11.2016, 18:33   #11
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Быстрая работа со строками

Значит в PureBasic 5.5 какая-то функция Left интересная.
В общем, примерно вот такой код:
For i = 0 to 30000
s$ = s$ + str(i)
next 

t = millisecs()

For i = 0 to 30000
sl$ = left(s$, i)
next

print millisecs() - t
Blitz3D: 44 мс
FreeBasic: 28 мс (Строки Си)
PureBasic: 3840 мс

Но если уменьшаем количество итераций в обоих циклах допустим до 300 (точно не помню до скольки), то результаты будут такие:

Blitz3D: 12 мс
FreeBasic: 9 мс
PureBasic: 2 мс

Может, конечно, ошибка какая-то, хз. Может в PB что-то заглючило от слишком длинной строки.

InStr тоже бывает двух типов:
- Зависит от длины строк (выигрывает на коротких строках) - Алгоритм Кнута — Морриса — Пратта
- Не зависит от длины - Алгоритм Ахо — Корасик

Может с Left такая же история?
(Offline)
 
Ответить с цитированием