Какую самую нелепую пессимизацию вы видели? [закрыто]

Нет. Назначение в Python - это выражение, а не выражение.

146
задан 4 revs, 4 users 100% 3 May 2012 в 14:43
поделиться

39 ответов

Один коллега должен был проверить доступ к странице для определенной роли - "Администратор" только. Это - то, что она записала:

.

if( CurrentUser.CurrentRole == "Role1" || CurrentUser.CurrentRole == "Role2")  
{
// Access denied
} 
else
{
// Access granted
}

вместо

if( !CurrentUser.CurrentRole.equals("Admin") ) 
{
 // access denied
}  

Таким образом каждый раз, когда новая роль была добавлена к системе, новая роль имела доступ ко всем конфиденциальным страницам.


Тот же коллега был также соединениями для производства и архивной таблицей для всех запросов.

2
ответ дан 23 November 2019 в 22:45
поделиться

Другой необычный прием производительности :)

if (!loadFromDb().isEmpty) {
    resultList = loadFromDb();
    // do something with results
}

За маленькую цену дополнительного хита DB Вы экономите все то время, делая как 10 строк кода, которые, вероятно, не сделали бы многого в пустом списке так или иначе. И вещи как это были рассеяны на всем протяжении кода :)

2
ответ дан 23 November 2019 в 22:45
поделиться

Я собирался упомянуть, что StringBuilder для tiny/non-looping представляют в виде строки concats, но его упомянутый.

Помещение переменных метода в частных участников класса для препятствования им то, чтобы быть " собранным "мусор" каждый раз выполнения метода". Переменные являются типами значения.

1
ответ дан 23 November 2019 в 22:45
поделиться

Приложение, которое привыкло поле Integer для выделенного, поразрядного, к которому группировки доступа к приложению наши клиенты могли добавить своих пользователей. Это означало в то время, когда мы могли создать общий итог 32 групп, чтобы быть совместно использованными через все 500 + клиенты.

Aaaah, но поразрядное сравнение быстрее, чем равняние и waaay быстрее, чем право соединения?

К сожалению, когда я полностью (и скорее устно) взбесился в этом коде, и это - автор, я обнаружил, что автор был моим боссом боссов. Довольно авторитарный чувак это складывается.

P.s.

Я знаю то, что Ваш думают, это полностью должно было быть право двоичной строки?:)

1
ответ дан 23 November 2019 в 22:45
поделиться

Многие программисты не знают или не хотят знать SQL, поэтому они находят «хитрости», которых следует избегать действительно с помощью SQL, чтобы они могли получить данные в массив. Массивы делают некоторых людей счастливыми. (Мне нравятся как курсоры, так и массивы. Coke и Pepsi.) Я нашел эти два блока кода в коде нескольких объектно-ориентированных программистов, который жаловался на медлительность реляционных баз данных. (ответ - не больше памяти или больше процессоров.)

Таблица в этом случае - огромная таблица с uniqueid_col - уникальным идентификатором или уникальной строкой.

Загрузите эти данные в arrayX (потому что массивы должны быть быстрее )

   Select uniqueid_col, col2, col3
     from super_big_tbl
 

(код псевдо)


Loop 
   arrayX.next_record
    if uniqueid_col = '829-39-3984'
      return col2
    end if
end loop
 

(Мой ответ внизу.)

Следующая ошибка - простая ошибка, которую я также видел. Идея в том, что вы никогда не получите дубликат таким образом:

   Select uniqueid_col, col2, col3
     from super_big_tbl
 group by uniqueid_col, col2, col3
   having uniqueid_col = '829-39-3984'

Правильный синтаксис должен быть

   Select uniqueid_col, col2, col3
     from super_big_tbl
    where uniqueid_col = '829-39-3984'
   
1
ответ дан 23 November 2019 в 22:45
поделиться

Любое значительное усилие по оптимизации, которое не основано на сортированных отчетах от инструмента профилировщика, зарабатывает большой WTF от меня.

0
ответ дан 23 November 2019 в 22:45
поделиться

Некоторые мои коллеги, которые были на проекте "оптимизации" существующих серверных пакетов (записаны в C++), "оптимизированный" до смерти регистрирующийся класс (!), с помощью win32-определенного кода и функций.

Возможно, узкое место было в logger.write (...), кто знает...

2
ответ дан 23 November 2019 в 22:45
поделиться

Я не думаю, что пессимизация случается редко. По моему опыту настройки производительности, большая часть низкой производительности вызвана «хорошей практикой программирования», оправдываемой именем «эффективности». Примеры:

  • Коллекции карт или "словари"
    Обычно в них используется какое-то хеш-кодирование, поэтому они будут иметь производительность O (1), но не будут работать даже при заполнении гораздо большим количеством элементов, чем обычно используется.

  • Итераторы
    Это оправдано тем, что они могут быть оптимизированы в эффективный встроенный код, когда его редко проверяют, чтобы убедиться, что они действительно есть.

  • Уведомления и обработка событий как способ сохранения согласованности данных
    Поскольку структура данных редко нормализуется, необходимо управлять несогласованностью, и уведомление является обычным методом, поскольку он якобы решает проблему «немедленно». Однако есть большая разница между оперативностью и эффективностью. Также «свойства», когда они Get или Set, поощряются проникать глубоко в структуру данных, чтобы попытаться сохранить ее согласованность. Эти методы «короткого поводка» могут привести к большим потерям вычислений. Методы «длинного поводка», такие как периодическое циклическое прохождение структуры данных для «восстановления», могут быть немного менее «немедленными», но гораздо более эффективными.

Примеры

3
ответ дан 23 November 2019 в 22:45
поделиться

У меня есть намеренная ... Однажды я реализовал сортировку с возвратом ... просто как доказательство концепции;)) Само собой разумеется, ее производительность была ужасной.

0
ответ дан 23 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: