/// <summary>
/// Logical and of a list of predicates.
/// </summary>public static Predicate<T> And(params Predicate<T>[] ands)
{
// return a new delegate which checks if all delegates in the array did return
// true for a given itemreturn item => ands.All(x => x(item));
}
Казалось бы, что тут может пойти не так?
О том, как на ровном месте получить 2.5 гб аллокаций, замедлить код в 10 раз, а затем всё геройски разрулить, если профайлера нет под рукой — тынц по ссылке выше
Здравствуйте, Sinix, Вы писали:
S>О том, как на ровном месте получить 2.5 гб аллокаций, замедлить код в 10 раз, а затем всё геройски разрулить, если профайлера нет под рукой — тынц по ссылке выше
— Старайтесь не создавать замыканий, если надо перебрать 20 миллионов элементов
— Got it!
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, ionoy, Вы писали:
I>>А вообще интересно, да
S>Угу. Мне больше нравится, что народ потихоньку втягивается в использование perfwiew. А то ещё года полтора назад обычная реакция была "ETW? WTF?!"
Я вот даже купил книгу "Writing High Performance .NET Code" в электронном виде, может быть даже ты советовал, не помню. Там как раз про PerfView и ETW очень подробно расписано. Правда пока не дочитал, но полезной и новой информации там реально дофига, так что покупкой остался доволен.
Здравствуйте, ionoy, Вы писали:
I>Я вот даже купил книгу "Writing High Performance .NET Code" в электронном виде, может быть даже ты советовал, не помню. Там как раз про PerfView и ETW очень подробно расписано. Правда пока не дочитал, но полезной и новой информации там реально дофига, так что покупкой остался доволен.
Ага, я её где-то упоминал. Мне она понравилась как книга от практика, этакие вести с полей Единственное но: мне там не понравились отдльные советы, что-то типа тюнинга шедулера для тасков и настройки пула потоков, если не перепутал. Всё-таки такие вещи надо делать по замерам, а не по чьим-то рекомендациям.
Интерес ещё в том, что автор работает в команде бинга, который как я подозреваю является основным раздвателей пенделей clr team. Во всяком случае большинство оптимизаций gc/jit (время запуска, фоновый gc, уборка в loh итд) добавили в рантайм после того, как .net стал активно использоваться в фронтэнде бинга.
А вообще книгу хорошо читать как дополнение к Pro .NET Performance от Sasha Goldshtein, там как раз упор на теорию и внутреннее устройство рантайма.
Здравствуйте, ionoy, Вы писали:
S>>О том, как на ровном месте получить 2.5 гб аллокаций, замедлить код в 10 раз, а затем всё геройски разрулить, если профайлера нет под рукой — тынц по ссылке выше I>- Старайтесь не создавать замыканий, если надо перебрать 20 миллионов элементов I>- Got it! I>А вообще интересно, да
Вот ещё пища для размышлений: в C++ оба варианта — что с замыканиями, что с ручным условием — выдают идентичный ASM код LIVE DEMO
Здравствуйте, ionoy, Вы писали:
I>Здравствуйте, Sinix, Вы писали:
S>>Здравствуйте, ionoy, Вы писали:
I>>>А вообще интересно, да
S>>Угу. Мне больше нравится, что народ потихоньку втягивается в использование perfwiew. А то ещё года полтора назад обычная реакция была "ETW? WTF?!"
I>Я вот даже купил книгу "Writing High Performance .NET Code" в электронном виде, может быть даже ты советовал, не помню. Там как раз про PerfView и ETW очень подробно расписано. Правда пока не дочитал, но полезной и новой информации там реально дофига, так что покупкой остался доволен.
Сам разработчик perfview -- Vance Morrison -- эту книгу советовал. Он там и отзыв оставил.
Здравствуйте, Evgeny.Panasyuk, Вы писали: EP>Вот ещё пища для размышлений: в C++ оба варианта — что с замыканиями, что с ручным условием — выдают идентичный ASM код
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Evgeny.Panasyuk, Вы писали: EP>>Вот ещё пища для размышлений: в C++ оба варианта — что с замыканиями, что с ручным условием — выдают идентичный ASM код
H>Еще бы. .NET не умеет инлайнить лямбды.
Здравствуйте, Sharov, Вы писали:
S>Сам разработчик perfview -- Vance Morrison -- эту книгу советовал. Он там и отзыв оставил.
Что-то содержание не впечатляет
Впихнуть в 330 страниц машину тьюринга, raid, api win/java/google, agile, закон Амдала, параметризацию sql-запросов, теорию массового обслуживания и её применимость к xml web services...
Мне кажется, автору должно понравиться вот это.
И это я всего до двухсотой страницы дошёл. Очень похоже на полупереваренный аналог курса "Теория информационных процессов и систем", только с выкинутой нафиг теорией игр (за избыток матана).
В общем, если тянет на хардкор, потратьте время на Рихтера, FDG от Krzysztof Cwalina и Brad Abrams, .net pro performance и Руссиновича. Ну и C# 5.0 Unleashed: Bart De Smet, чтобы заполировать. Всяко полезней будет.
Здравствуйте, ionoy, Вы писали:
I>А в чём, кстати, загвоздка?
В .NET нет таких сущностей как "лямбда" и "замыкания". Они реализуются языками программирования через классы и делегаты. Выделять память на стеке под экземпляры классов .NET не умеет, инлайнить виртуальные вызовы вроде как тоже.
Здравствуйте, Sinix, Вы писали:
S>Наткнулся на шикарную статью от Alois Kraus
"Шикарного" там ничего нет — просто обычная грабля от разработчиков .NET на задаче, решаемой очевидным образом и дающей неочевидные результаты.
Вопросы по грабле:
1. Суть проблемы — много распределений памяти для лямбды, комбинирующей вычисления. Но ведь где-то писалось, что .NET не выкидывает объекты просто так — если запрошено распределение объекта того же типа, который ранее был освобождён, .NET может вернуть тот же кусок памяти без дополнительных поисков. Почему же тогда тормоза?
2. Отдельное нарекание на комбинатор: "проверить, что элемент удовлетворяет N условиям" и "проверить, что все элементы удовлетворяют условию У1, потом У2..." — разные вещи с очевидным преимуществом первого варианта.
3. Если даже допустить, что неоднократно восхваляемая самим же мелкософтом LINQ не так хороша, почему мы узнаём об этом только сейчас, да и то от посторонних людей? Где были глаза у "архитекторов" этого "универсального поделия"? Разве не проводилось никаких тестов? Разве их архитектурные решения не высвечивали очевидные сценарии, где LINQ лажает? А проводились хоть какие-то сравнения с другими вариантами обработки массивов — например, ranges из D?
Короче, за предупреждение о грабле — спасибо, но выводы вы делать не умеете — упомянутые книжки пусть читают *овнокодеры микрософта — это ИХ КОСЯК. Программист должен думать о задаче и как её решить _идеально_спроектированными_и_вылизанными_ инструментами, а "копаться в кишках" — это и есть прямая задача архитекторов инструментов, за что и получают двойное бабло.
Здравствуйте, ionoy, Вы писали:
I>А в чём, кстати, загвоздка?
Проблема Неуловимого Джо. Никто не заморачивался, другими словами.
Со временем вполне возможно добавят, по крайней мере в предкомпилированный код. В .net native трансляция возложена на бэкенд от msvc, так что затык, как я понимаю, только в безопасности оптимизаций. Для инлайна лямбд принципиальных проблем нет.
Здравствуйте, hardcase, Вы писали:
H>В .NET нет таких сущностей как "лямбда" и "замыкания". Они реализуются языками программирования через классы и делегаты. Выделять память на стеке под экземпляры классов .NET не умеет
Так это ответственность рантайма, не CTS. В зависимости от реализации может и поменяться.
H>инлайнить виртуальные вызовы вроде как тоже.
Ну, инлайнить — нет, а вот хак для интерфейсов есть, и давно (см раздел The JIT's Approach). Для делегатов реализовать ту же комбинацию (проверка на target method + прямой jump) в принципе, не проблема. Другое дело, что вся эта радость никак не докуменирована и может свободно меняться от релиза к релизу.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Sharov, Вы писали:
S>>Сам разработчик perfview -- Vance Morrison -- эту книгу советовал. Он там и отзыв оставил.
S>Что-то содержание не впечатляет
S>Впихнуть в 330 страниц машину тьюринга, raid, api win/java/google, agile, закон Амдала, параметризацию sql-запросов, теорию массового обслуживания и её применимость к xml web services... S>Мне кажется, автору должно понравиться вот это.
S>И это я всего до двухсотой страницы дошёл. Очень похоже на полупереваренный аналог курса "Теория информационных процессов и систем", только с выкинутой нафиг теорией игр (за избыток матана).
Вот не согласен, хоть пока (а с таким курсом еще не скоро, если pdf не качать и печатать) и не читал.
Машина Тьюринга и проч. теория наверное на пол страницы. А так в основном "common cases & pitfalls", что кмк полезно.
И как раз наличие тмо и проч. математики меня наоборот радует, поскольку позволяет к этому делу подойти с научным
подходом и соотв. наработанным инструментарием. Что опять же позволяет понять и быстро исправить всяческие bottleneck'и, а в лучшем случае вообще сразу предотвратить.
S>В общем, если тянет на хардкор, потратьте время на Рихтера, FDG от Krzysztof Cwalina и Brad Abrams, .net pro performance и Руссиновича. Ну и C# 5.0 Unleashed: Bart De Smet, чтобы заполировать. Всяко полезней будет.
FDG есть и читал (вероятно не все), но не очень ясно каким они сюда боком. Т.е. понятно, но крайне незначительно
они цепляют производительность -- "дизпоузьте все что дизпоузится". Руссинович про устройство венды? Дельно, но не самое
актуальное чтение для дотнет разботчика в контексте озвученных книг, хотя книга очень полезная, ибо закладывает базис
понимания работы ОС. Вообще, кмк, прозводительность такая штука, где
безусловно нужно знать и понимать азы. И книга, приведенная мной выше, думается их дает.
Но также важно, если не важнее,уметь пользоваться инструментарием, как платным -- dottrace и т.п.,
так и бесплатным -- perfview, например.
У меня к сожалению, слабо с теорией, а из инструментов ничего кроме dottracе'а и не использовал.
Здравствуйте, Sharov, Вы писали:
S>И как раз наличие тмо и проч. математики меня наоборот радует, поскольку позволяет к этому делу подойти с научным S>подходом и соотв. наработанным инструментарием. Что опять же позволяет S>понять и быстро исправить всяческие bottleneck'и, а в лучшем случае вообще сразу предотвратить.
А вот меня нет. Потому что любая мат модель должна использоваться по месту, или не использоваться вообще. Иначе получается math for lulz и никакого практического выхлопа.
Попробую объяснить мысль. Сорри, немного эмоционально, но так получилось что я некоторое время как раз разгребал завалы идеальных решений, наболело
Я таки не поленился и скачал книгу (потом я честно её выкачал обратно, так что ничего не было). Это самый обычный вузовский учебник, со всем прелестями типа упоминания win 2000 в 2009 году, черно-белыми малопонятными графиками по трём точкам без источников и формулами из вики. Поэтому к книге я даже не буду возвращаться, от неё один фиг толка не будет.
Так вот. В перфомансе есть всего два кита: это алгоритмы и измерения. Первое позволяет оценить порядок величин плюс-минус тапок, второе — проверить соответствие реальности и ожиданий и найти виноватого. С научным подходом с обеих сторон тоже всё понятно. В 99% случаев, O-нотация и перцентиль (или вообще среднее арифметическое), вот и вся rocket science. В теории, мы можем прикрутить ещё что-то наукообразное на этапе перевода алгоритма в исполняемый код, но к обсуждаемой теме это не имеет ровным счётом никакого отношения.
Возвращаемся к матмоделям. В книге (ну да, я обещал, но кто помнит дальше одного абзаца?) в самом "практическом" разделе "CASE STUDY I: QUEUING THEORY APPLIED TO SOA" тупо берутся готовые формулы из M/M/1 Open Model и... нет, я просто оставлю вот эту картинку:
That's it. Глава закончилась, дальше вопросы "для закрепления".
Сорри, но к научному подходу(tm) это имеет не больше отношения, чем барби — к компьютерной инженерии.
Собственно, две цитаты
5.9 VALIDITY OF THE SOA PERFORMANCE MODEL
... the SOA performance model was more accurate with the smaller utilizations or lighter loads prior to the knee of the curve.
This concludes our first case study on applying queuing theory to predicting the performance and scalability of the SOA-based enterprise software applications.
5.10 SUMMARY
...
и
A PILLOW. SKIPPER HITS HER SISTER WITH A PILLOW. PLAYFULLY. Skipper has just lost her homework, all her music files and her laptop, but all she's moved to is STATUS: PILLOW FIGHT.
попробуй угадать, какая откуда
S>>В общем, если тянет на хардкор, потратьте время на Рихтера, FDG от Krzysztof Cwalina и Brad Abrams, .net pro performance и Руссиновича. Ну и C# 5.0 Unleashed: Bart De Smet, чтобы заполировать. Всяко полезней будет.
S>FDG есть и читал (вероятно не все), но не очень ясно каким они сюда боком. Т.е. понятно, но крайне незначительно
FDG относится к обязательным для прочтения книжкам, т.к. она помогает правильно поставить мозги и не писать код ради кода Вот офигенный пример
. Предлагаемый в FDG подход имеет куда больше отношения к научному чем "формулы и графики есть == всё ок". И, если натягивать сову на глобус, то основной принцип в FDG
Framework Design Principle
Frameworks must be designed starting from a set of usage scenarios and code samples implementing these scenarios.
вполне относится и к перформансу. Интересует производительность? Начни с верифицируемых примеров.
S> Руссинович про устройство венды? Дельно, но не самое актуальное чтение для дотнет разботчика в контексте озвученных книг, хотя книга очень полезная, ибо закладывает базис понимания работы ОС.
+1 Его и деСмета давал уже для веса. Иначе несолидно маленький список получался
S>Вообще, кмк, прозводительность такая штука, где безусловно нужно знать и понимать азы.
Угу. Но тогда надо или лезть в теорию по конкретной предметной области, где всё уже хожено и перехожено до нас, или ограничиться азами из теории алгоритмов и структур данных (причём для типового опердня в 99% случаев хватает знания O-нотации).
S>Но также важно, если не важнее,уметь пользоваться инструментарием, как платным -- dottrace и т.п., S>так и бесплатным -- perfview, например. S>У меня к сожалению, слабо с теорией, а из инструментов ничего кроме dottracе'а и не использовал.
А там нет никакой магии, только практика. Ищем самое тормозное место (обычно это узел в дереве с высоким весом, который вызывает хелперы или системные API), определяем проблему, чиним, повторяем.
Основные идеи классно расписаны в начале книги у Ben Watson (.net performance).