Содержание
- 2. Зачем нужна производительность?
- 3. Как понять, на каком уровне проблема?
- 4. Инструменты dotTrace dotMemory BenchmarkDotNet Visual Studio profiler CodeTrack CLR Profiler
- 5. Инструменты BenchmarkDotNet CodeTrack CLR Profiler
- 6. Инструменты Performance Monitor
- 7. Инструменты ETW Windows Performance Analyzer
- 8. Инструменты MS Message Analyzer
- 9. Lock-free & Wait-free
- 10. Lock-free & Wait-free
- 11. Lock-free & Wait-free double CompareExchange (ref double location1, double value, double comparand); Compare and Swap Interlocked
- 12. ConcurrentDictionary
- 13. ConcurrentDictionary Сильная деградация при попытке получить все блокировки
- 14. SIMD Single instruction, Multiple data float[] values = GetValues(); float increment = GetIncrement(); for (int i
- 15. SIMD Single instruction, Multiple data
- 16. Task.Yield async Task LongRunningCpuBoundWorkAsync() { for (int i = 0; i != 1000000; ++i) { ...
- 17. Task.Yield async Task LongRunningCpuBoundWorkAsync() { for (int i = 0; i != 1000000; ++i) { ...
- 18. Long switch-case switch (packetID) { case BncsPacketId.Null: break; case BncsPacketId.EnterChat: string ecUniqueName = pck.ReadNTString(); string ecStatstring
- 19. Long switch-case Dictionary > switch (packetID) { case BncsPacketId.Null: break; case BncsPacketId.EnterChat: string ecUniqueName = pck.ReadNTString();
- 20. GC Клиентский режим Серверный режим
- 21. ConcurrentBag Оптимизация потребления памяти
- 22. async/await
- 23. async/await
- 24. async/await
- 25. async/await Task.FromResult(0) Task.CompletedResult .Net 4.6
- 26. Аллокация на стеке .net core 2.1 Span C# 7.2 int* block = stackalloc int[100]; Span span
- 27. JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный internal static class FreeObjectUtils
- 28. JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный internal static class FreeObjectUtils
- 29. JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный internal static class FreeObjectUtils
- 30. JIT оптимизация public Dictionary(IEqualityComparer comparer); public struct LongEqualityComparer : IEqualityComparer { public static readonly IEqualityComparer BoxedInstanceInt64
- 31. JIT оптимизация [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Clear() { if (typeof(T) == typeof(int) || typeof(T) == typeof(uint) ||
- 32. MemoryStream
- 33. MemoryStream
- 34. MemoryStream То же самое для: List Collection Dictionary и прочих коллекций
- 35. struct[] -> IList int[] a = new int[10]; DoSomething(a); public void DoSomething (IList list) { }
- 36. LINQ // [18 7 - 18 80] IL_000e: ldarg.0 // this IL_000f: call instance class [mscorlib]System.Collections.Generic.IEnumerable`1
- 37. LINQ public IEnumerable FindChildren(Guid parentId) { return this.AllParts.Where(part => part.ParentGuid == parentId).ToList(); } public IEnumerable FindChildren(Guid
- 38. LINQ public IEnumerable FindChildren(Guid parentId) { return this.AllParts.Where(part => part.ParentGuid == parentId).ToList(); } public IEnumerable FindChildren(Guid
- 39. Строки Вместо конкатенаций используй StringBuilder Вместо string.Format используй конкатенацию string first = "first"; string second =
- 40. Boxing public void Info(params object[] args) log.Info(1, 2, 3, 4, 5); Как надо? public static void
- 41. Heap Allocation Viewer
- 42. Почитать? Federico Lois Sasha Goldstein Андрей Акиньшин
- 44. Скачать презентацию












![SIMD Single instruction, Multiple data float[] values = GetValues(); float increment =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-13.jpg)












![JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-26.jpg)
![JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-27.jpg)
![JIT оптимизация [AggressiveInlining] спасет всех Generic типы инлайнятся Типичные заблуждения: Компилятор умный](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-28.jpg)

![JIT оптимизация [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Clear() { if (typeof(T) == typeof(int) ||](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-30.jpg)



![struct[] -> IList int[] a = new int[10]; DoSomething(a); public void DoSomething (IList list) { }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-34.jpg)
![LINQ // [18 7 - 18 80] IL_000e: ldarg.0 // this IL_000f:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-35.jpg)



![Boxing public void Info(params object[] args) log.Info(1, 2, 3, 4, 5); Как](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/949408/slide-39.jpg)


Поисковый запрос ChemSpider
Презентация
Символы. Представление символов в компьютере
Формы спецификации
Классические методы проектирования. Метод проектирования Джексона
Что такое FRONT END?
Informatsionnoe_obespechenie_biznes_planirovania
Цифровая мода
Квест Хэллоуин
Лекция №2. Тест-дизайн
БД и СУБД Access
Создание 3D модели на основе операций твердотельного моделирования. (6 занятие)
Организация, принципы построения и функционирования компьютерных сетей
Массивы и структуры
Общие сведения о языке программирования Паскаль. Начала программирования
9-1-6
Позиционные системы счисления
Аттестационная работа. Документооборот. Организация работы с документами
Создание таблицы
Методологические основы CASE – технологии
Настольные игры c макросом
Information theory. Project
Проведение информационноразъяснительной медиа кампании о деятельности национального превентивного механизма
Задание
Презентация на тему Структуры данных: деревья, сети, графы, таблицы
Логические элементы ЭВМ
Устройство компьютера
Полиморфизм. Лекция 6