PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Странная Left


Странная Left

Сообщений 1 страница 5 из 5

1

Интересно, почему вот так:

Код:
txt$="Для чего нам функция Left?"+Space(100000000)

Start = ElapsedMilliseconds()
Debug Left(txt$, FindString(txt$, "?"))
Debug ElapsedMilliseconds() - Start

медленнее, чем так:

Код:
txt$="Для чего нам функция Left?"+Space(100000000)

Start = ElapsedMilliseconds()
Debug Mid(txt$, 1, FindString(txt$, "?"))
Debug ElapsedMilliseconds() - Start

Отредактировано Andruk (06.08.2025 21:44:25)

0

2

Вероятно особенности реализации и спрашивать нужно у её автора.
Подозреваю, что mid использует команды процессора для работы со строками, а left действует по байтно.
Но за точной причиной к Фреду :)

p.s. при чём ещё более странным является то, что скорость left зависит от размера строки принимаемой в качестве параметра.
p.p.s. все функции библиотеки string не стоит использовать для больших строк.

Отредактировано useful (07.08.2025 15:14:50)

0

3

useful написал(а):

при чём ещё более странным является то, что скорость left зависит от размера строки принимаемой в качестве параметра.

Что странного учитывая что строки нультерминированные и их длина не хранится?

0

4

Пётр
но ведь функции Left не обязательно идти до конца... там что, логика дойти до конца чтобы знать что позиция находится в пределах длины, а потом прыгнуть в позицию? Не проще ли идти до позиции и если встретиться 0, то закончить. В этом случае скорость не зависит от длины строки.

В данном случаем можно бы считать функцию Left не оптимизированной и отправить в отписку/отчёт в раздел багов. По функционалу Mid должна быть медленнее, так как кроме действия Left (дойти до позиции) нужно ещё и подсчитать число символов для захвата.

Andruk
Для точности надо так:

Код:
DisableDebugger
txt$="Для чего нам функция Left?"+Space(100000000)

Start = ElapsedMilliseconds()
Left(txt$, FindString(txt$, "?"))
EnableDebugger
Debug ElapsedMilliseconds() - Start

DisableDebugger
txt$="Для чего нам функция Left?"+Space(100000000)

Start = ElapsedMilliseconds()
Mid(txt$, 1, FindString(txt$, "?"))
EnableDebugger
Debug ElapsedMilliseconds() - Start

Но перед тем как отключить отладчик DisableDebugger нужно проверить что код исправен с отладчиком.
У меня 27 и 7 мс

Отредактировано AZJIO (08.08.2025 13:20:48)

0

5

AZJIO написал(а):

но ведь функции Left не обязательно идти до конца

Фред ее так написал что сначала вычисляется длина строки, а потом все остальное. Не оптимальное решение, но переписывать он не торопится, притом что не раз об этом просили.

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Странная Left