Size: a a a

2020 February 14

SB

Sergey Bodrov in Delphi & Lazarus
Решил сравнить скорость работы разных способов:
источник

SB

Sergey Bodrov in Delphi & Lazarus
ss := Format('int=%d str=%s hex=%.4x', [i, s, i]);
ss := 'int=' + IntToStr(i) + ' str=' + s + ' hex=' + IntToHex(i, 4);
источник

SB

Sergey Bodrov in Delphi & Lazarus
В D7 Format в два раза быстрее, в FPC в два раза медленнее
источник

SB

Sergey Bodrov in Delphi & Lazarus
D7:
Format: 03.499
+string: 06.735
источник

SB

Sergey Bodrov in Delphi & Lazarus
FPC 3.0.4 (Lazarus 2.0.6):
Format: 08.358
+string: 04.125
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
FPC 3.0.4 (Lazarus 2.0.6):
Format: 08.358
+string: 04.125
что за попугаи?
источник

SB

Sergey Bodrov in Delphi & Lazarus
Секунды и миллисекунды, цикл на 10 милллионов без оптимизаций
источник

AS

Alexey Shumkin in Delphi & Lazarus
Sergey Bodrov
ss := Format('int=%d str=%s hex=%.4x', [i, s, i]);
ss := 'int=' + IntToStr(i) + ' str=' + s + ' hex=' + IntToHex(i, 4);
и Format - в 500 раз читаемей,
источник

RS

Renat Suleymanov in Delphi & Lazarus
Sergey Bodrov
FPC 3.0.4 (Lazarus 2.0.6):
Format: 08.358
+string: 04.125
Интуитивно всегда казалось, что Формат должен обрабатывать как минимум чуть дольше, чем простая конкантенация. Почему в дельфи наоборот, интересно
источник

RS

Renat Suleymanov in Delphi & Lazarus
Sergey Bodrov
FPC 3.0.4 (Lazarus 2.0.6):
Format: 08.358
+string: 04.125
Кстати, с включенными оптимизациями? ИЛи не повлияло?
источник

AS

Alexey Shumkin in Delphi & Lazarus
Renat Suleymanov
Интуитивно всегда казалось, что Формат должен обрабатывать как минимум чуть дольше, чем простая конкантенация. Почему в дельфи наоборот, интересно
да как бы нет ))
конкатенация - это поочерёдное выделение памяти

Format может выделить сразу ))
по-моему, так
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Shumkin
да как бы нет ))
конкатенация - это поочерёдное выделение памяти

Format может выделить сразу ))
по-моему, так
Почему сразу, если длина строки неизвестна заранее до операции. Как в прочем и с конкатенацией
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Kit Bayun
нет, не должно
Должно
источник

KB

Kit Bayun in Delphi & Lazarus
ну попробуй сам
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Если правильно все связать, то MenuItem.Action.Execute; и ActionAdd.Execute; делают одно и то же
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
С этим actionlist лично мною только написано с сотню программ
источник

AS

Alexey Shumkin in Delphi & Lazarus
Renat Suleymanov
Почему сразу, если длина строки неизвестна заранее до операции. Как в прочем и с конкатенацией
почему неизвестна? )) входные параметры известны )
но я реализации не знаю )) так что 100% утверждать не берусь
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
И не надо привязывать OnClick к элементу меню, если ты уже привязал action
источник

RS

Renat Suleymanov in Delphi & Lazarus
Alexey Shumkin
почему неизвестна? )) входные параметры известны )
но я реализации не знаю )) так что 100% утверждать не берусь
"Входные параметры" тогда известны и в случае с конкатенацией. ВОобще, много наверное зависит от оптимизацией в данном случае, если существуют, буферизации, тип строки и т.д. Мне казалось, что в функции формат в худшем случае идет простой реплейс, в лучшем преобразуется в то же складывание строки. Но это гадание на кофейной гуще, согласен )
источник

ГМ

Геннадий Малинин in Delphi & Lazarus
Renat Suleymanov
Почему сразу, если длина строки неизвестна заранее до операции. Как в прочем и с конкатенацией
Вероятно, при format, идёт не конкатенация, а смещение памяти, а память выделена до работы со строкой.
Т.е. первым делом, получаем все значения и вычисляем конечный размер строки. Потом вставляем текст путем сдвига
источник