![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() По ходу написание программы. Встала задача в скорости работы программы и возник вопрос.
А какой тип данных быстрее проходит сравнение ? Инфы об этом я не нашел. Поэтому решил сам подсчитать. Код:
Вот сравнительная диаграмма количества проведённых операций сравнения разных типов данных. ![]() ![]() ![]() Последний раз редактировалось seeman_tm, 28.11.2013 в 20:06. |
#2
|
||||
|
||||
![]() Цитата:
С чего бы это строка "9797979797979797" сравнивается быстрее строки "aaaaaaaa"? И число 9797979797979797 никак не влезет в тип Integer - что-то тут напутано. |
#3
|
||||
|
||||
![]() Сравнивается a и b.
Даже сравнивнение a и a Код:
По сути не важно значение а и б, главное чтоб соответствовали одному и тому же типу. То есть, а и b пусть относятся к какому нибудь одному типу, и не важно какие у низ значения, результат практически одинаковый всегда. А строка "9797979797979797" сравнивается быстрее строки "aaaaaaaa" по тому что там тип данных другой. String и ShortString Почитай в чём у них отличия. Если надо, могу исходничёк кинуть. Последний раз редактировалось seeman_tm, 28.11.2013 в 18:50. |
#4
|
||||
|
||||
![]() Интересно было бы так же увидеть сравнения различных типов - int и int64, string и shortstring, string и PChar, ну и так далее. Варианты integer & float тоже были бы интересны.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
||||
|
||||
![]() Хорошо. Сделаю. Вот тока по позже. Передохнуть надо.
Выше ещё две диаграммы ещё выложил. Более подробно. Но глядя на диаграммах, даёт понять, что если надо парсить текст, то лучше его преобразовать в массив Integer или Byte и работать с числами, а не со строками. Мляя. На последней диаграмме не написал "Количество сравнений за 5 сек" за место "Категория 1". Ну это просто заёп сказывается. Последний раз редактировалось seeman_tm, 28.11.2013 в 20:15. |
#6
|
||||
|
||||
![]() А компилится в х32 или в х64 при сравнении int64?
jmp $ ; Happy End! The Cake Is A Lie. |
#7
|
||||
|
||||
![]() Вот результаты сравнений Integer = Int64 и Int64 = Integer
![]() Немного переиначил тест. Теперь складывается 10 результатов одного и того же сравнения по 5 секунд и берётся средняя, то есть делим на 10. Цифры результатов вроде те же. Следовательно тест верный. Смотрите какая картина вырисовывается. Даже в последовательности, в которой передаются переменные в ветвление (If ... Then ....), сказывается в производительности. Несколько раз перепроверял. На лаги не похоже. Да и лаги быть не могут, у меня 4 ядра. 1 ядро чисто тест забивает. to Bargest, Если про винду ты, то Win 7 x64 (CodeGear Delphi 2009). А компилю как компилилось изначально после установки. Да я и не знаю где это менять. Последний раз редактировалось seeman_tm, 28.11.2013 в 22:39. |
#8
|
||||||||
|
||||||||
![]() Цитата:
Цитата:
Цитата:
Цитата:
Код:
|
#9
|
||||
|
||||
![]() ![]() Цитата:
Цитата:
Убери из кода Цитата:
p.s. Уже 4 часа утра. Пора спать. Последний раз редактировалось seeman_tm, 28.11.2013 в 23:07. |
#10
|
||||
|
||||
![]() Не стану создавать очередную тему. Зачем хламить форум.
Написал функцию. Цель её проста. Поиск подстрок в строке. Но основано на массивах байтов. Что, судя по выше выложенным диаграммам, даст наибольшую скорость поиска. О её плюсах. Скорость проведения поиска (Надо проверить на тестах и сравнить результаты с аналогичными функциями поиска уже подстроки в строке). Есть возможность задать функции несколько подмассивов сразу. (Функция возвращает позицию первого найденного подмассива и найденный подмассив) Поиск можно проводить с любой позиции. В случае, если надо провести поиск с учётом регистра символов, то имеется и эта возможность. Собственно сама функция. Код:
Последний раз редактировалось seeman_tm, 29.11.2013 в 13:36. |
#11
|
||||||
|
||||||
![]() Цитата:
Хорошо, вот вариант без UniqueString: Код:
|
#12
|
||||
|
||||
![]() |
#13
|
||||
|
||||
![]() Цитата:
Возвращаю твой совет: Цитата:
|
#14
|
||||
|
||||
![]() Это же нужно догадаться, измерять скорость с помощью GetTickCount. Думаешь после этого твои измерения имеют хоть какую-нибудь ценность?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#15
|
||||
|
||||
![]() угу. QueryPerformanceCounter / QueryPerformanceFrequency хотя бы...
Пишу программы за еду. __________________ |