Производительность анти паттернов

Мне кажется, вы пытаетесь сопоставить теги без «/» в конце. Попробуйте следующее:

<([a-zA-Z][a-zA-Z0-9]*)[^>]*(?<!/)>
13
задан Xian 8 January 2009 в 21:00
поделиться

18 ответов

Самый большой антишаблон производительности, с которым я столкнулся:

  • Не измеряющий уровень прежде и после изменений.

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

70
ответ дан Sebastian Dietz 9 January 2009 в 07:00
поделиться
  • 1
    Я знаю it' s старый ответ, но я испытываю затруднения действительно понимание различия между запросами, сделанными с $elemMatch и их " normal" эквивалентный (как вышеупомянутый). Что делает Вы подразумеваете под " версия $elemMatch делает частичное соответствие, даже если у Вас есть больше чем одно поле в том же элементе к match"? – Merc 25 February 2013 в 14:11

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

Это было, по-видимому, разоблачено создателем/ведущим разработчиком DirectX, который переписал версию C++ в C# с крупными улучшениями. [источник, требуемый]

1
ответ дан Xian 9 January 2009 в 07:00
поделиться

Добавляя к массиву, использующему (например), push_back () в C++ STL, ~ = в D, и т.д. когда Вы знаете, как большой массив, как предполагается, опережает время и может предварительно выделить его.

1
ответ дан dsimcha 9 January 2009 в 07:00
поделиться
  • 1
    @Merc: Скажите, что элементы в Вашем массиве имеют поля " a" и поля " b": прибытие: [{a:1, b:1}, {a:2, b:10}..]. В этом случае arr: {$elemMatch: {a:1}} соответствовал бы первому элементу (элемент имеет поле " a" со значением 1) укусил arr: {a:1}, не будет (элемент быть {a:1, b:1} и не {a:1}. Другими словами, без $elemMatch весь элемент в массиве должен соответствовать, а не определенный набор полей. – Remon van Vliet 26 February 2013 в 21:07

Некоторые разработчики полагают, что быстрое-но-неправильное решение иногда предпочтительно для медленного-но-корректного. Таким образом, они проигнорируют различные граничные условия или ситуации, которых "никогда не будет происходить", или "не будет иметь значения" в производстве.

Это никогда не хорошая идея. Решения всегда должны быть "корректными".

Вы, возможно, должны скорректировать свое определение "корректных" в зависимости от ситуации. То, что важно, - то, что Вы знаете/определяете точно, чем Вы хотите, чтобы результат был для любого условия, и что код дает те результаты.

2
ответ дан Kristopher Johnson 9 January 2009 в 07:00
поделиться

Общие решения .

Просто, потому что данный шаблон/технология работает лучше при одном обстоятельстве, не означают, что это делает в другом.

злоупотребление StringBuilder в .NET является частым примером этого.

2
ответ дан annakata 9 January 2009 в 07:00
поделиться

Использование Вашего языка программирования. Вещи как использование обработки исключений, вместо если/еще просто, потому что в PLSnakish 1.4 это быстрее.Угадайте что? Возможности, это не быстрее вообще и что два года с этого времени, кто-то поддерживающий Ваш код станет действительно рассерженным на Вас, потому что Вы запутали код и заставили его работать намного медленнее, потому что в PLSnakish 1.8 специалисты по обслуживанию языка решили проблему и теперь если/еще в 10 раз быстрее, чем использование приемов обработки исключений. Работа с Ваш язык программирования и платформа!

4
ответ дан PEZ 9 January 2009 в 07:00
поделиться
  • 1
    Когда я останавливаю приложение, я прерываю потоки и когда я перезапускаю приложение, состояние в ВЫПОЛНИМОМ. – Jose Hdez 6 September 2011 в 22:09

Michael Jackson дает два правила для оптимизации производительности:

  1. не делают этого.
  2. (только эксперты) еще не делают этого.

, Если люди волнуются по поводу производительности, скажите им делать ее реальной - что такое хорошая производительность и как Вы тестируете на нее? Затем, если Ваш код не работает до их стандартов, по крайней мере, это - что-то, о чем программист и пользователь приложения договариваются.

, Если люди волнуются по поводу затрат невыполнения на перезапись косного кода (например, приемник времени) затем, представляют Ваши оценки и демонстрируют, что это может быть сделано в расписании. Принятие его может.

2
ответ дан Kev 9 January 2009 в 07:00
поделиться

Отсутствие ясной структуры программы является самым большим грехом кода их всех. Замысловатая логика, которая, как полагают, быстра, почти никогда не.

4
ответ дан krosenvold 9 January 2009 в 07:00
поделиться
  • 1
    Но я не делаю undestand, почему первый раз, когда я запускаю поток, состояние, ВЫПОЛНИМ. – Jose Hdez 6 September 2011 в 22:46

Замена больше чем одной переменной за один раз. Это управляет мной абсолютно помешанный ! Как можно определить влияние изменения в системе, когда больше чем одна вещь была изменена?

Связанный с этим, внося изменения, которые не гарантированы наблюдениями. Почему добавляют быстрее/больше центральные процессоры, если процесс не является зависящим от ЦП?

3
ответ дан Patrick Cuff 9 January 2009 в 07:00
поделиться

Тот, с которым я столкнулся, бросал аппаратные средства в серьезно взломанный код, в попытке сделать его достаточно быстро, вид обратной из статьи Jeff Atwood упомянутый в комментарии Rulas. Я не говорю о различии между ускорением вида, который использует основной, корректный алгоритм путем выполнения его на более быстрых аппаратных средствах по сравнению с использованием оптимизированного алгоритма. Я говорю об использовании не, очевидно, корректный, домой варил O (n^3) алгоритм, когда O (n регистрируют n) алгоритм находится в стандартной библиотеке. Существуют также вещи как стандартные программы кодирования руки, потому что программист не знает то, что находится в стандартной библиотеке. То, что очень расстраивающее.

6
ответ дан Rob K 9 January 2009 в 07:00
поделиться
  1. Используя #defines вместо функций для предотвращения штрафа вызова функции. Я видел код, где расширения определяют, оказалось, сгенерировал огромный и действительно медленный код. Конечно, было невозможно отладить также. Подставляемые функции являются способом сделать это, но они должны использоваться с осторожностью также.

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

6
ответ дан Laserallan 9 January 2009 в 07:00
поделиться
  • 1
    Я don' t читают любое из этого как рекомендация, чтобы пользовательские классы не наследовались std::iterator. Точка N3931 - то, что спецификация библиотеки Standard не должна требовать классы библиотеки наследовать его. В случае unary_function и binary_function, что целая модель была определена нижняя к методам SFINAE, std::bind, и т.д., типы, функции, и так далее. Когда Вы означаете писать класс итератора, Вы haven' t действительно сделанный поэтому, пока Вы не определяете все корректные определения типов и поддерживаете корректные выражения. std::iterator всего один способ сделать часть того задания легче. – aschepler 24 May 2014 в 07:53

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

8
ответ дан PEZ 9 January 2009 в 07:00
поделиться
  • 1
    Итераторы не используются в контексте, были то, что вопросы (т.е. у Вас никогда нет основы cass указатель, указывающий на полученный итератор). Итераторы всегда являются объектами. – Martin York 25 June 2011 в 03:48

не осуществляют рефакторинг или оптимизируют при написании кода. чрезвычайно важно не попытаться оптимизировать Ваш код перед окончанием его.

4
ответ дан Qubeuc 9 January 2009 в 07:00
поделиться
  • 1
    Вы can' t перезапускают " stopped" поток вызовом запускается снова на нем! you' ll должен использовать другой поток (новый) или в случае большинства пулов потоков, тот же поток может быть снова использован, чтобы сделать материал..., но that' s другой вопрос:) – Toby 6 September 2011 в 22:15

Используя шаблоны разработки только, чтобы использовать их.

6
ответ дан Florian Greinacher 9 January 2009 в 07:00
поделиться

Переменное повторное использование.

я раньше делал это, все время полагая, что я сохранял несколько циклов на объявлении и понижал объем потребляемой памяти. Эти сбережения имели крохотную ценность по сравнению с тем, как непослушный это сделало код для отладки, особенно если я закончил тем, что переместил блок кода вокруг и предположения об измененных начальных значениях.

17
ответ дан Kev 9 January 2009 в 07:00
поделиться
  • 1
    Этот совет чрезмерно широк. It' s хорошо для не имения виртуального деструктора, если производный класс doesn' t нужна любая очистка (автоматически сгенерированный или иначе), или если это won' t использоваться полиморфно. It' s чрезвычайно редкий для имения указателя на итератор. – Mark Ransom 25 June 2011 в 03:49

Слон в комнате: Фокусировка на микрооптимизации уровня реализации вместо на лучших алгоритмах.

29
ответ дан dsimcha 9 January 2009 в 07:00
поделиться
  • 1
    @Martin: it' s все еще возможный для получения указателя на итератор, и в этом случае, you' ре завинчено. I' ve использовал указатели на (мощный, не STL) итераторы в проекте. – Fred Foo 25 June 2011 в 03:51

Юлианская Береза однажды сказала мне:

"Да, но сколько лет запуска приложения на самом деле требуется для восполнения времени, проведенного разработчиками, делающими его?"

Он обращался к кумулятивному количеству времени, сохраненному во время каждой транзакции оптимизацией, которая займет данное количество времени для реализации.

Мудрые слова от старого мудреца... Я часто думаю об этом совете при рассмотрении выполнения броской оптимизации. Можно расширить то же понятие немного далее путем рассмотрения, сколько времени разработчика проводится, имея дело с кодом в его текущем состоянии по сравнению с тем, сколько времени сэкономлено пользователями. Вы могли даже взвесить время почасовой ставкой разработчика по сравнению с пользователем, если бы Вы хотели.

, Конечно, иногда ее невозможное для измерения, например, если приложение электронной коммерции занимает 1 секунду дольше для ответа, Вы освободите немного маленьких денег на % от пользователей, скучающих в течение той 1 секунды. Для составления того, второго, необходимо реализовать и поддержать оптимизированный код. Оптимизация влияет на валовую прибыль положительно и чистую прибыль негативно, таким образом, намного тяжелее для балансировки. Вы могли попробовать - хорошей статистикой.

4
ответ дан Simon Gibbs 9 January 2009 в 07:00
поделиться
  • 1
    I' ve, обновленный для ответа для включения источника класса Потока. Это действительно ли единственным путем является исключение, может быть брошено здесь поэтому, возможно, то, что это было вызванным от некоторого другого места? или возможно you' ре, проверяющее его слишком рано? Возможно, Вы могли подготовиться сам содержавший тест/образец, таким образом, мы можем воспроизвести... – Toby 6 September 2011 в 11:11

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

Он, казалось, ожидал, что я скажу вещи как "проверка X, затем проверю Y, затем проверю Z", другими словами, для обеспечения эксперта предполагает.

я ответил, что необходимо диагностировать проблему. Мои предположения могли бы быть неправильными менее часто, чем чужой, но они все еще будут неправы, и поэтому неутешительны.

я не думаю, что он понял.

2
ответ дан Mike Dunlavey 9 January 2009 в 07:00
поделиться
Другие вопросы по тегам:

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