Презентация к докладу «Практические приёмы оптимизации .NET-приложений» с конференции dotnetconf (Челябинск, 19 апреля 2015) http://dotnetconf.ru/materialy/optimization
"За" и "против" дополнений для VisualStudio.
Обзор возможностей CodeRush.
Как использовать Шаблоны для ускорения разработки.
Рефакторинг, статический анализ.
Roslyn, VS 2014 и CodeRush.
Доклад Олега Николаева является своеобразным ответом на уводящее в депрессию выступление Вали Ельцова на прошлом митапе. Олег рассказывает о том, что принято использовать в 2016 году, что же все-таки делать с “данными Шредингера”, какие есть “лунные призмы” для оптимизации кампаний и что такое развернутый программатик.
Shadow Fight 2: архитектура системы аналитики для миллиарда событийVyacheslav Nikulin
Аудитория Shadow Fight 2, насчитывающая 50 миллионов игроков, ежедневно генерирует огромное количество событий, анализ которых происходит в реальном времени. Доклад посвящен архитектуре системы аналитики на основе поискового движка Elasticsearch. Будет рассмотрен технологический стек Elasticsearch, Logstash, Kibana, который позволяет в сжатые сроки создать гибкое и надежное решение. Также Вячеслав поможет разобраться со схемой обработки событий, моделью данных и особенностями настройки, расскажет о команде и трудозатратах на разработку и поддержку системы
"За" и "против" дополнений для VisualStudio.
Обзор возможностей CodeRush.
Как использовать Шаблоны для ускорения разработки.
Рефакторинг, статический анализ.
Roslyn, VS 2014 и CodeRush.
Доклад Олега Николаева является своеобразным ответом на уводящее в депрессию выступление Вали Ельцова на прошлом митапе. Олег рассказывает о том, что принято использовать в 2016 году, что же все-таки делать с “данными Шредингера”, какие есть “лунные призмы” для оптимизации кампаний и что такое развернутый программатик.
Shadow Fight 2: архитектура системы аналитики для миллиарда событийVyacheslav Nikulin
Аудитория Shadow Fight 2, насчитывающая 50 миллионов игроков, ежедневно генерирует огромное количество событий, анализ которых происходит в реальном времени. Доклад посвящен архитектуре системы аналитики на основе поискового движка Elasticsearch. Будет рассмотрен технологический стек Elasticsearch, Logstash, Kibana, который позволяет в сжатые сроки создать гибкое и надежное решение. Также Вячеслав поможет разобраться со схемой обработки событий, моделью данных и особенностями настройки, расскажет о команде и трудозатратах на разработку и поддержку системы
Работа с данными выделилась в отдельную область разработки. Гига-, тера-, петабайты информации поражают воображение и озадачивают, когда дело доходит до тестирования. Hadoop, Spark, ETL - непонятные слова, к которым непонятно, как подступиться. На основе своего опыта разработки wordpress.com Игорь поделится опытом обеспечения качества в области больших данных. В рамках его доклада вы узнаете, как традиционные подходы к тестированию и автоматизации тестирования соотносятся с Big Data-решениями, а также, какие специфические проблемы требуется решать, когда дело доходит до QA.
Презентация подготовлена по материалам выступления Игоря Хрола на витебской конференции “Developer's Software Conference” (30.11.2019).
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахYandex
В докладе рассказано о вычислительной модели на графах, в основе которой лежит механизм передачи сообщений между вершинами, а также о реализации в рамках данной модели API для написания алгоритмов на C++.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Андрей Сибирёв "Ваше собственное облако — война за независимость"Yandex
Сегодня всё больше и больше компаний решаются на перевод своей инфраструктуры и сервисов в облака. Некоторые даже начинают строить свой бизнес, не имея ни единого собственного сервера для обработки или хранения пользовательских данных, и при этом становятся лидерами в своих сегментах рынка.
Но, несмотря на очевидные преимущества этого подхода, не всех устраивает перспектива быть привязанными к конкретному поставщику облачных услуг. В докладе рассказывается об основных тенденциях в современном «облакостроении», о свободе и гибкости и, самое главное, представляется наша открытая облачная платформа.
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
Доклад для Middle и Senior .NET-программистов о микроптимизациях приложения, из которого Вы узнаете:
О том, как важно понимать IL и ASM код, соответствующий вашей C#-программе;
О различных уровнях микрооптимизаций начиная от C# и JIT компиляторов, заканчивая CPU;
Об особенностях оптимизаций под различные процессорные архитектуры;
Об отличиях разных версиях JIT-компиляторов, включая RyuJIT;
О том, как правильно замерять время выполнения приложений и оценивать эффективность оптимизаций.
Доклад будет полезен всем разработчикам, которые хотят хотят сделать свои и без того быстрые программы ещё на 5-10% быстрее.
Работа с данными выделилась в отдельную область разработки. Гига-, тера-, петабайты информации поражают воображение и озадачивают, когда дело доходит до тестирования. Hadoop, Spark, ETL - непонятные слова, к которым непонятно, как подступиться. На основе своего опыта разработки wordpress.com Игорь поделится опытом обеспечения качества в области больших данных. В рамках его доклада вы узнаете, как традиционные подходы к тестированию и автоматизации тестирования соотносятся с Big Data-решениями, а также, какие специфические проблемы требуется решать, когда дело доходит до QA.
Презентация подготовлена по материалам выступления Игоря Хрола на витебской конференции “Developer's Software Conference” (30.11.2019).
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахYandex
В докладе рассказано о вычислительной модели на графах, в основе которой лежит механизм передачи сообщений между вершинами, а также о реализации в рамках данной модели API для написания алгоритмов на C++.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Андрей Сибирёв "Ваше собственное облако — война за независимость"Yandex
Сегодня всё больше и больше компаний решаются на перевод своей инфраструктуры и сервисов в облака. Некоторые даже начинают строить свой бизнес, не имея ни единого собственного сервера для обработки или хранения пользовательских данных, и при этом становятся лидерами в своих сегментах рынка.
Но, несмотря на очевидные преимущества этого подхода, не всех устраивает перспектива быть привязанными к конкретному поставщику облачных услуг. В докладе рассказывается об основных тенденциях в современном «облакостроении», о свободе и гибкости и, самое главное, представляется наша открытая облачная платформа.
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
Доклад для Middle и Senior .NET-программистов о микроптимизациях приложения, из которого Вы узнаете:
О том, как важно понимать IL и ASM код, соответствующий вашей C#-программе;
О различных уровнях микрооптимизаций начиная от C# и JIT компиляторов, заканчивая CPU;
Об особенностях оптимизаций под различные процессорные архитектуры;
Об отличиях разных версиях JIT-компиляторов, включая RyuJIT;
О том, как правильно замерять время выполнения приложений и оценивать эффективность оптимизаций.
Доклад будет полезен всем разработчикам, которые хотят хотят сделать свои и без того быстрые программы ещё на 5-10% быстрее.
- Как начать развивать систему аналитики в компании, не имея армию data-инженеров.
- Как перейти из состояния «я не понимаю какие квадратики на этой схеме нужны для моих задач» и при этом не уйти в R&D на несколько месяцев.
- Как реализовать потоковую обработку данных на PHP (~40К записей в минуту).
- Какие технические решения применяли в нашем решении и какие факторы учитывали в принятии решений.
Презентация с мероприятия https://habr.com/ru/company/tuturu/blog/426059/
Javascript-фреймворки: должен остаться только одинSergey Xek
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
В докладе пойдет речь о том, что производительность фронтенда — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
Рассказ от tech-менеджера о том, как мы в Acronis выбирали фреймворк в условиях, когда любое более-менее важное технологическое решение сразу затрагивает с десяток команд, несколько сотен человек и права «случайно все сломать» нет.
В докладе пойдет речь о том, что производительность фронтенда — это больше про слаженную работу команды, про понятный и масштабируемый код, чем про сухие циферки. Но циферки тоже будут.
1) Какие у нас были проблемы с текущим фреймворком — UI, архитектура, код.
2) Как измеряли, что примерно стоит брать (исследование популярности).
3) Что рассматривали.
4) На пути к демо-проекту, какие были сложности (то, что уперли идею с Typescript, собственный компилятор шаблонов, четыре Flux-фреймворка и все плохи).
5) Два пилотных демо-проекта: цифры.
6) Оценка трудоемкости перехода.
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
В докладе речь пойдёт о языке Go. Вячеслав расскажет о внутреннем устройстве языка (структуре, оптимизации, сборщике мусора и т.д.), о том, как и почему Go используют в Яндексе и что о нём говорят разработчики на С++. Отдельно Вячеслав остановится на многопоточном программировании и особенностях отладки и профилирования в Go.
Similar to Практические приёмы оптимизации .NET-приложений (20)
The document discusses microbenchmarking and factors that can affect benchmark results such as hardware, software environments, optimizations, caching, and isolation of tests. It provides examples of benchmarks that examine effects like branch prediction, interface dispatch, inlining, and SIMD vectorization. Benchmarks that calculate square roots demonstrate how a JIT compiler may optimize repetitive calculations. The document emphasizes the importance of controlling variables, using statistical analysis of multiple runs, isolating tests, and understanding how systems like caches and branch predictors can skew results.
Программисты часто работают с числами. Чаще всего это целые числа, но иногда доводится работать и с дробными. C этими самыми числами приходится делать разные операции: сложение, умножение, приведение типов, сравнение, округление и многие другие. Увы, далеко не все до конца понимают, как же именно компьютер совершает все эти замечательные операции. В этом докладе мы с вами прорешаем серию увлекательных упражнений на знание арифметики. Поговорим про стандарт IEEE 754, про разницу в рантаймах и компиляторах, про регистры FPU и прочие сложности жизни.
Не так давно вышел C# 6, основанный на новом компиляторе Roslyn. Обновление языка содержит большое количество приятных синтаксических конструкций, которые упрощают написание кода и делают его более лаконичным. Но Microsoft на этом не успокоились: прямо сейчас ведётся работа над 7-ой версией языка, которую планируют сделать ещё удобнее, благодаря реализации современных тенденций написания кода. В этом докладе мы поговорим о том, что может войти в C# 7. В числе прочего будут обсуждаться Tuples, Pattern matching, Records / algebraic data types, Nullability tracking и многое другое.
В последнее время экосистема .NET развивается очень динамично: постоянно появляются новые технологии и инструменты, а старые обзаводятся новыми возможностями. Уследить за всем очень сложно, поэтому в этом докладе мы постараемся обзорно взглянуть на текущее состояние платформы .NET, а также на то, что нас ждёт в ближайшем будущем. Будем говорить про грядущий C#7, про кроссплатформенность и нативную компиляцию, про новый .NET Core 5 и ASP.NET 5, про новые инструменты для разработчиков и последние анонсы от Microsoft.
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
Этот доклад продолжает тему моего выступления с прошлого DotNext про сложную науку о микрооптимизациях. Вас ждут новые увлекательные истории о том, что же происходит под капотом .NET-программ. Будем обсуждать различия разных C# и JIT компиляторов (Roslyn и RyuJIT в том числе), медитировать на IL и ASM листинги, а также разбираться с особенностями современных CPU.
Доклад для Middle и Senior .NET-программистов о различиях в рантаймах. Вы узнаете:
* чем отличается среда исполнения MS.NET от Моno;
* чем отличаются разные версии компилятора и BCL;
* как работает JIT-компилятор на различных архитектурах;
* что еще следует помнить, если вы пишете кроссплатформенные программы под .NET.
Доклад будет полезен всем разработчикам, которые хоть раз сталкивались с «неожиданным» поведением рантайма.
The document discusses various techniques for optimizing .NET applications at multiple levels. It covers topics like memory traffic optimization through techniques like avoiding closures, using readonly fields, and value type optimizations. It also discusses microbenchmarks and techniques like leveraging instruction level parallelism, cache utilization through blocking algorithms, and using binary search.
3. 3
Важные вопросы
• А точно нужно что-то оптимизировать?
• Насколько будем оптимизировать?
• Под что будем оптимизировать?
• Что именно будем оптимизировать?
4. 4
От идеи до запуска
Общая схема
• Idea → C#
• C# + Compiler → IL
• IL + BCL + 3rdParty → App
• App + CLR (GC,JIT) → ASM
• ASM + CPU → Magic
Конфигурация
• OS: Win, Linux, MacOS
• CLR: CLR2, CLR4, CoreCLR,
Mono
• GC: MS, Boehm, Sgen
• JIT: x86, x64, RyuJIT
• Compilation: JIT, NGen, MPGO,
.NET Native
• …
5. 5
Наука о бенчмарках
• Макробенчмарки и микробенчмарки
• Важно использовать хороший профайлер
• Для микрооптимизаций нужны микробенчмарки
• Java-мир: JMH (см. http://shipilev.net/)
• Запускаем бенчмарк правильно: Release without
debugging, холодный старт vs прогрев, статистики
и т.д.
• BenchmarkDotNet
• https://github.com/AndreyAkinshin/BenchmarkDotNet
• https://www.nuget.org/packages/BenchmarkDotNet/
6. 6
Начинаем оптимизацию
• Грамотно проектируем архитектуру
• Выбираем эффективные алгоритмы
• И правильные структуры данных
• Следим за использованием памяти
• GC & Memory traffic
• class vs struct, упаковки и распаковки
• Пулинг дорогих объектов
• И т.д.
7. 7
Знай BCL!
Operation List LinkedList SortedDictonary Dictionary
Insert O(n) O(1) O(log n) O(1)
Remove O(n) O(1) O(log n) O(1)
Lookup O(n) O(n) O(log n) O(1)
Get by index O(1) O(n) — —
Display sorted O(n * log n) O(n * log n) O(n) O(n * log n)
• Пример 1: коллекции
14. 14
Loop unrolling
Достоинства:
• Экономия на икрементах
• Экономия на branch prediction
• Улучшение ILP
• «Помощь» другим оптимизациям
Недостатки:
• Увеличивается размер кода
• Промахи в кеше команд
• Нагрузка на регистры
• «Вред» другим оптимизациям