Оптимизация приложений на платформе .NET
Покупка
Издательство:
ДМК Пресс
Перевод:
Киселев Артём Николаевич
Год издания: 2017
Кол-во страниц: 524
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Дополнительное образование
ISBN: 978-5-97060-487-8
Артикул: 477133.04.99
Увеличение производительности алгоритмов и приложений является чрезвычайно важным аспектом разработки и может дать вам преимущество перед конкурентами, а вашим пользователям обеспечить низкую стоимость
владения и удовольствие от использования быстрых и отзывчивых приложений. Данная книга описывает внутренние особенности ОС Windows, среды выполнения CLR и аппаратного обеспечения, влияющие на производительность приложений, а также дает вам знания и инструменты для измерения производительности вашего кода в изоляции от внешних факторов. Книга наполнена примерами кода на C# и рекомендациями, которые
помогут вам выжать максимум возможного из вашего приложения - низкое потребление памяти, согласованную нагрузку на процессор и минимальное количество операций ввода/вывода с сетью и диском. Издание предназначено для программистов, знакомых с языком C# и платформой .NET.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.01: Математика и компьютерные науки
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Голдштейн С. Зурбалев Д. Флатов И. Оптимизация приложений на платформе .NET
Pro .NET Performance Sasha Goldshtein Dima Zurbalev Ido Flatov Apress ®
Оптимизация приложений на платформе .NET Москва, 2017 Голдштейн С. Зурбалев Д. Флатов И.
УДК 004.438.NET ББК 32.973.26-018.2 Г79 Г79 Голдштейн С., Зурбалев Д., Флатов И. и др. Оптимизация приложений на платформе .NET. – Пер. с англ. Киселев А. Н. – М.: ДМК Пресс, 2017. – 524 с.: ил. ISBN 978-5-97060-487-8 Увеличение производительности алгоритмов и приложений является чрезвычайно важным аспектом разработки и может дать вам преимущество перед конкурентами, а вашим пользователям обеспечить низкую стоимость владения и удовольствие от использования быстрых и отзывчивых приложений. Данная книга описывает внутренние особенности ОС Windows, среды выполнения CLR и аппаратного обеспечения, влияющие на производительность приложений, а также дает вам знания и инструменты для измерения производительности вашего кода в изоляции от внешних факторов. Книга наполнена примерами кода на C# и рекомендациями, которые помогут вам выжать максимум возможного из вашего приложения – низкое потребление памяти, согласованную нагрузку на процессор и минимальное количество операций ввода/вывода с сетью и диском. Издание предназначено для программистов, знакомых с языком C# и платформой .NET. УДК 004.438.NET ББК 32.973.26-018.2 Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-143-024-458-5 (англ.) © by Sasha Goldshtein, Dima Zurbalev, and Ido Flatow ISBN 978-5-97060-487-8 (рус.) © Оформление, перевод на русский язык, ДМК Пресс
Моей любимой жене Дине (Dina), наполнившей мою жизнь солнечным светом. Моим родителям, Борису (Boris) и Марине (Marina), жертвовавшим всем, чтобы я ни в чем не нуждался. – Саша Моей очаровательной жене Ефрат (Efrat), напомнившей мне, что муза не пропала – она просто играет в прятки. – Идo
ОГЛАВЛЕНИЕ Предисловие ............................................. 13 Об авторах ................................................ 16 О научных редакторах ................................. 18 Благодарности ........................................... 19 Введение .................................................. 20 ГЛАВА 1. Характеристики производительности ............ 23 Требования к производительности .......................................... 24 Характеристики производительности ...................................... 28 В заключение .......................................................................... 31 ГЛАВА 2. Измерение производительности ................... 32 Подходы к измерению производительности ............................ 32 Встроенные инструменты Windows .......................................... 33 Счетчики производительности ................................................. 34 Механизм трассировки событий для Windows .......................... 42 Профилировщики времени ...................................................... 58 Дискретный профилировщик Visual Studio ............................... 59 Инструментированный профилировщик Visual Studio ............... 64 Дополнительные приемы использования профилировщиков времени ................................................................................... 67 Профилировщики выделения памяти ...................................... 71 Профилировщик выделения памяти Visual Studio ..................... 72 CLR Profiler ............................................................................... 75 Профилировщики памяти ......................................................... 81 Другие профилировщики ........................................................ 86 Профилировщики доступа к данным и базам данных ............... 87 Профилировщики конкуренции ................................................ 88
Оглавление Профилировщики ввода/вывода .............................................. 91 Микрохронометраж ................................................................. 92 Пример неправильного микрохронометража ........................... 92 Рекомендации по проведению хронометража .......................... 96 В заключение .......................................................................... 99 ГЛАВА 3. Внутреннее устройство типов ..................... 102 Пример.................................................................................. 102 Семантические отличия между ссылочными типами и типами значений ................................................................. 104 Хранение, размещение и удаление ....................................... 105 Внутреннее устройство ссылочных типов .............................. 108 Таблица методов .................................................................... 109 Вызов методов экземпляров ссылочных типов ....................... 114 Блоки синхронизации и ключевое слово lock .......................... 122 Внутреннее устройство типов значений................................. 128 Ограничения типов значений ................................................. 130 Виртуальные методы типов значений ..................................... 132 Упаковка ................................................................................ 133 Предотвращение упаковки типов значений с помощью метода Equals ........................................................................ 136 Метод GetHashCode ............................................................... 140 Эффективные приемы использования типов значений .......... 144 В заключение ........................................................................ 144 ГЛАВА 4. Сборка мусора ......................................... 145 Назначение сборщика мусора ............................................... 146 Управление свободным списком ............................................ 146 Сборка мусора на основе подсчета ссылок ............................ 148 Сборка мусора на основе трассировки .................................. 150 Фаза маркировки ................................................................... 151 Фазы чистки и сжатия ............................................................ 158 Закрепление .......................................................................... 161 Разновидности сборщиков мусора ........................................ 163 Приостановка потоков для сборки мусора.............................. 163 Сборщик мусора для сервера ................................................ 170 Выбор разновидности сборщика мусора ................................ 172 Поколения ............................................................................. 175 Предположения в основе модели поколений .......................... 176 Реализация поколений в .NET ................................................ 177
Оглавление Куча больших объектов .......................................................... 183 Ссылки между поколениями ................................................... 185 Фоновый сборщик мусора...................................................... 188 Сегменты сборщика мусора и виртуальная память ................ 189 Финализация ......................................................................... 194 Детерминированная финализация вручную ........................... 194 Автоматическая недетерминированная финализация ............ 195 Ловушки недетерминированной финализации ....................... 198 Шаблон реализации метода Dispose ...................................... 202 Слабые ссылки ...................................................................... 205 Взаимодействие со сборщиком мусора ................................ 208 Класс System.GC ................................................................... 209 Взаимодействие с применением интерфейсов размещения CLR .................................................................... 213 Триггеры сборщика мусора .................................................... 215 Эффективные приемы повышения производительности сборки мусора ....................................................................... 216 Модель поколений ................................................................. 216 Закрепление .......................................................................... 218 Финализация ......................................................................... 219 Разные советы и рекомендации ............................................. 220 В заключение ........................................................................ 226 ГЛАВА 5. Коллекции и обобщенные типы ................... 230 Обобщенные типы ................................................................. 230 Обобщенные типы в .NET ....................................................... 234 Ограничения обобщенных типов ............................................ 236 Реализация обобщенных типов в CLR ..................................... 239 Коллекции ............................................................................. 249 Параллельные коллекции ....................................................... 252 Проблемы, связанные с кешем .............................................. 254 Собственные коллекции ........................................................ 261 Система непересекающихся множеств .................................. 261 Список с пропусками ............................................................. 263 Одноразовые коллекции ........................................................ 265 В заключение ........................................................................ 269 ГЛАВА 6. Конкуренция и параллелизм ....................... 270 Перспективы и преимущества ............................................... 270
Оглавление Зачем использовать приемы параллельного программирования? .............................................................. 272 От потоков к пулам потоков и задачам ................................... 273 Параллелизм задач ................................................................ 281 Параллелизм данных.............................................................. 290 Асинхронные методы в C# 5 ................................................... 295 Дополнительные шаблоны в TPL ............................................ 300 Синхронизация ...................................................................... 302 Код без блокировок ................................................................ 304 Механизмы синхронизации Windows ..................................... 311 Вопросы оптимального использования кеша ......................... 314 Использование GPU для вычислений ..................................... 318 Введение в C++ AMP .............................................................. 318 Умножение матриц ................................................................. 322 Моделирование движения частиц .......................................... 323 Мозаики и разделяемая память ............................................. 325 В заключение ........................................................................ 331 ГЛАВА 7. Сети, ввод/вывод и сериализация ............... 332 Общие понятия ...................................................................... 333 Синхронный и асинхронный ввод/вывод ................................ 333 Порты завершения ввода/вывода .......................................... 335 Пул потоков в .NET ................................................................ 340 Копирование памяти .............................................................. 341 Чтение вразброс и запись со слиянием ................................. 342 Файловый ввод/вывод ........................................................... 343 Управление кешированием .................................................... 343 Небуферизованный ввод/вывод ............................................. 344 Сети ...................................................................................... 345 Сетевые протоколы ................................................................ 346 Сетевые сокеты ..................................................................... 348 Сериализация и десериализация данных .............................. 351 Тестирование производительности средств сериализации .... 352 Сериализация объектов DataSet ............................................ 354 Windows Communication Foundation ....................................... 356 Пороговые значения .............................................................. 356 Модель обработки ................................................................. 357 Кеширование ......................................................................... 359 Асинхронные клиенты и серверы WCF ................................... 359 Привязки ................................................................................ 361 В заключение ........................................................................ 362
Оглавление ГЛАВА 8. Небезопасный код и взаимодействие с ним ... 364 Небезопасный код ................................................................. 365 Закрепление объектов в памяти и дескрипторы сборщика мусора ................................................................................... 366 Управление жизненным циклом ............................................. 368 Выделение неуправляемой памяти ........................................ 368 Использование пулов памяти ................................................. 368 P/Invoke ................................................................................. 370 PInvoke.net и P/Invoke Interop Assistant ................................... 372 Привязка ................................................................................ 374 Заглушки маршалера ............................................................. 375 Двоично совместимые типы ................................................... 380 Направление маршалинга, ссылочные типы и типы значений ................................................................................ 382 Code Access Security .............................................................. 383 Взаимодействие с COM-объектами ....................................... 384 Управление жизненным циклом ............................................. 386 Маршалинг через границы подразделений ............................ 386 Импортирование библиотек типов и Code Access Security ...... 389 NoPIA ..................................................................................... 390 Исключения ........................................................................... 391 Расширения языка C++/CLI ................................................... 392 Вспомогательная библиотека marshal_as ............................... 395 Код на языке IL и неуправляемый код ..................................... 397 Взаимодействие со средой выполнения WinRT в Windows 8 ... 397 Эффективные приемы взаимодействий ................................ 398 В заключение ........................................................................ 399 ГЛАВА 9. Оптимизация алгоритмов .......................... 400 Систематизация сложности ................................................... 401 Большое О ............................................................................. 401 Машины Тьюринга и классы сложности .................................. 403 Мемоизация и динамическое программирование ................. 409 Расстояние Левенштейна ....................................................... 411 Кратчайший путь между всеми парами вершин ...................... 413 Аппроксимация ..................................................................... 416 Задача коммивояжера ........................................................... 417 Задача о максимальном разрезе ............................................ 418 Вероятностные алгоритмы .................................................... 419 Вероятностное решение задачи о максимальном разрезе ..... 419