Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual Basic: Общие вопросы > Имеется ли разница скорости между двумя сравнениями: |
Автор: Сергей85 21.01.17, 15:18 |
if bBool=true и if bBool ? |
Автор: Akina 21.01.17, 16:49 |
Первое - плюс одна операция сравнения. |
Автор: __Sergey__ 21.01.17, 18:26 |
Компилятору всё равно, для этих записей генерируется одинаковые инструкции. |
Автор: Akina 21.01.17, 18:38 |
Значит, переменная bBool определена как boolean. Тогда оптимизатор правильно и вполне ожидаемо удалил избыточное сравнение. |
Автор: Сергей85 22.01.17, 08:52 |
Вы не оставили мне выбора. При тесте на трех 16миллионном массивах без =true 6:58, 46, 47, с true - 7:19, 48, 48. Какого-то черта разница все-таки есть. Перепроверил 2 раза. Ок, ладно. В случае с Bool укороченная запись, ускоряющая код, найдена. Но есть ли похожие укороченные записи для других типов данных? Или укороченные записи самих сравнений. Вон, Xor неожиданно выстрелил по скорости... Добавлено Стоп. В VB6 нет такой записи как "!bTemp". Not bTemp... Опять тестить, надоело... Добавлено А вот тут фигня получилась NOT медленнее, чем = FALSE. 8:00, 1:18,49 - против 7:29, 1:11, 47. Добавлено Цитата Akina @ Может, NOT инвертирует, а потом сравнивает с True; а =false - просто сравнивает с false? |
Автор: Mikle 22.01.17, 11:35 |
Вместо этого <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> If a = False Then do_something Или этого: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> If Not a Then do_something Можно попробовать третий вариант: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> If a Then Else do_something |
Автор: Сергей85 22.01.17, 12:41 |
a = false: 7:38 a Then Else: 7:24. Да, подходит. Если условие одно. А если несколько - не проверял. (добавлено) Этот результат может быть неверным. Проверял с дебаггером - а он, как оказалось, вносит погрешность ~2% в измерения. Здесь разница слишком маленькая, чтобы считать ее за истину. Перепроверять надо. |