Управление памятью в .NET для профессионалов : написание более качественного, производительного и масштабируемого кода
Здесь можно купить книгу "Управление памятью в .NET для профессионалов : написание более качественного, производительного и масштабируемого кода" в печатном или электронном виде. Также, Вы можете прочесть аннотацию, цитаты и содержание, ознакомиться и оставить отзывы (комментарии) об этой книге.
Место издания: Москва
ISBN: 978-5-97060-800-5
Страниц: 800
Артикул: 95154
Возрастная маркировка: 16+
Краткая аннотация книги "Управление памятью в .NET для профессионалов"
Хотя в .NET управление памятью осуществляется автоматически, понимание того, как именно это делается, сулит немало преимуществ. Вы сможете писать более качественные программы, эффективно взаимодействующие с памятью. Книга содержит 25 сценариев поиска и устранения неисправностей, призванных помочь в диагностике сложных проблем при работе с памятью. Приводится также ряд полезных рекомендаций по написанию кода, учитывающих особенности управления памятью и позволяющих избежать типичных ошибок. Книга адресована разработчикам программного обеспечения для платформы .NET, архитекторам и специалистам по производительности.
Содержание книги "Управление памятью в .NET для профессионалов : написание более качественного, производительного и масштабируемого кода"
Об авторе
О технических рецензентах
Благодарности
Предисловие
Введение
От издательства
Глава 1. Основные понятия
Терминология, относящаяся к памяти
Статическое выделение
Регистровая машина
Стек
Стековая машина
Указатель
Куча
Ручное управление памятью
Автоматическое управление памятью
Распределитель, модификатор и сборщик
Подсчет ссылок
Отслеживающий сборщик
Этап пометки
Этап сборки
Немного истории
Резюме
Правило 1: учиться, учиться и учиться
Глава 2. Низкоуровневое управление памятью
Оборудование
Память
Центральный процессор
Операционная система
Виртуальная память
Большие страницы
Фрагментация виртуальной памяти
Общая структура памяти
Управление памятью в Windows
Организация памяти в Windows
Управление памятью в Linux
Организация памяти в Linux
Зависимость от операционной системы
NUMA и группы процессоров
Резюме
Правило 2: избегайте произвольного доступа, отдавайте предпочтение последовательному
Правило 3: улучшайте пространственную и временную локальность данных
Правило 4: пользуйтесь продвинутыми средствами
Глава 3. Измерения памяти
Измеряйте как можно раньше
Накладные расходы и вмешательство
Выборка и трассировка
Дерево вызовов
Графы объектов
Статистика
Задержка и пропускная способность
Дампы памяти, трассировка, динамическая отладка
Среда Windows
Краткий обзор
VMMap
Счетчики производительности
Трассировка событий для Windows
Windows Performance Toolkit
PerfView
ProcDump и DebugDiag
WinDbg
Дизассемблеры и декомпиляторы
BenchmarkDotNet
Коммерческие инструменты
Среда Linux
Краткий обзор
Perfcollect
Trace Compass
Дампы памяти
Резюме
Правило 5: измеряйте GC как можно раньше
Глава 4. Фундаментальные основы .NET
Версии .NET
Детали внутреннего устройства .NET
Разбираем пример программы
Сборки и домены приложений
Забираемые сборки
Области памяти процесса
Сценарий 4.1. Сколько места в памяти занимает моя программа?
Сценарий 4.2. Моя программа потребляет все больше и больше памяти
Сценарий 4.3. Моя программа потребляет все больше и больше памяти
Сценарий 4.4. Моя программа потребляет все больше и больше памяти
Система типов
Категории типов
Хранение типов
Типы значений
Ссылочные типы
Строки
Интернирование строк
Сценарий 4.5. Моя программа потребляет слишком много памяти
Упаковка и распаковка
Передача по ссылке
Передача по ссылке экземпляра типа значений
Передача по ссылке экземпляра ссылочного типа
Локальность типов данных
Статические данные
Статические поля
Внутреннее устройство статических данных
Резюме
Структуры
Классы
Глава 5. Разделение памяти на части
Стратегии разделения памяти
Разделение по размеру
Куча малых объектов
Куча больших объектов
Разделение по времени жизни
Сценарий 5.1. Как чувствует себя моя программа? Динамика размеров поколений....290
Запомненные наборы (Remembered sets)
Таблицы карт (Card tables)
Связки карт
Физическое разделение
Сценарий 5.2. Утечка памяти в nopCommerce?
Сценарий 5.3. Растранжиривание кучи больших объектов?
Анатомия сегментов и кучи
Повторное использование сегментов
Резюме
Правило 11: следите за размерами поколений
Правило 12: избегайте лишних ссылок в куче
Правило 13: наблюдайте за использованием сегментов
Глава 6. Выделение памяти
Введение в распределение памяти
Выделение памяти сдвигом указателя
Выделение памяти из списка свободных блоков
Создание нового объекта
Выделение памяти в куче малых объектов
Выделение памяти в куче больших объектов
Балансировка кучи
Исключение OutOfMemoryException
Сценарий 6.1. Нехватка памяти
Выделение памяти в стеке
Избегание выделения памяти
Явное выделение памяти для ссылочных типов
Скрытое выделение памяти
Скрытое выделение памяти в библиотеках
Сценарий 6.2. Исследование выделения памяти
Сценарий 6.3. Функции Azure
Резюме
Правило 14: избегайте выделения памяти в куче на критических с точки зрения производительности участках программы
Правило 15: избегайте дорогостоящего выделения памяти в LOH
Правило 16: по возможности выделяйте память в стеке
Глава 7. Сборка мусора – введение
Общее описание
Пример процесса сборки мусора
Шаги процесса сборки мусора
Сценарий 7.1. Анализ использования GC
Профилирование GC
Данные для настройки производительности сборки мусора
Статические данные
Динамические данные
Сценарий 7.2. Демонстрация бюджета выделения
Инициаторы сборки мусора
Запуск по причине выделения памяти
Явный запуск
Сценарий 7.3. Анализ явных вызовов GC
Запуск по причине нехватки памяти у системы
Запуск по различным внутренним причинам
Приостановка движка выполнения
Сценарий 7.4. Анализ времени приостановки GC
Выбор поколения для сборки
Сценарий 7.5. Анализ выбираемых поколений
Резюме
Глава 8. Сборка мусора – этап пометки
Обход и пометка объектов
Корни – локальные переменные
Хранилище локальных переменных
Корни на стеке
Лексическая область видимости
Живые стековые корни и лексическая область видимости
Живые стековые корни с ранней сборкой корней
Информация для GC (GC Info)
Закрепленные локальные переменные
Просмотр стековых корней
Корни финализации
Внутренние корни GC
Корни – описатели GC
Анализ утечек памяти
Сценарий 8.1. Утечка памяти в nopCommerce?
Сценарий 8.2. Нахождение самых популярных корней
Резюме
Глава 9. Сборка мусора – этап планирования
Куча малых объектов
Заполненные и пустые блоки
Сценарий 9.1. Дамп памяти с поврежденными структурами
Таблица кирпичей
Закрепление
Сценарий 9.2. Исследование закрепления
Границы поколений
Оставление
Куча больших объектов
Заполненные и пустые блоки
Принятие решения об уплотнении
Резюме
Глава 10. Сборка мусора – очистка и уплотнение
Этап очистки
Куча малых объектов
Куча больших объектов
Этап уплотнения
Куча малых объектов
Куча больших объектов
Сценарий 10.1. Фрагментация кучи больших объектов
Резюме
Правило 17: следите за приостановкой среды выполнения
Правило 18: избегайте кризиса среднего возраста
Правило 19: избегайте фрагментации старого поколения и LOH
Правило 20: избегайте явной сборки мусора
Правило 21: избегайте утечек памяти
Правило 22: избегайте закрепления
Глава 11. Варианты сборки мусора
Обзор режимов
Режим рабочей станции и серверный режим
Неконкурентный и конкурентный режим
Конфигурирование режимов
.NET Framework
.NET Core
Приостановка и накладные расходы GC
Описание режимов
Неконкурентный режим рабочей станции
Конкурентный режим рабочей станции (до версии 4.0)
Фоновый режим рабочей станции
Неконкурентный серверный режим
Фоновый серверный режим
Режимы задержки
Пакетный режим
Интерактивный режим
Режим низкой задержки
Режим длительной низкой задержки
Регион без сборки мусора (No GC Region)
Цели оптимизации задержки
Выбор варианта GC
Сценарий 8.1. Проверка параметров GC
Сценарий 8.2. Измерение и тестирование производительности различных режимов GC
Резюме
Правило 23: выбирайте режим GC обдуманно
Правило 24: помните о режимах задержки
Глава 12. Время жизни объекта
Жизненные циклы объекта и ресурса
Финализация
Введение
Проблема ранней сборки корней
Критические финализаторы
Внутреннее устройство финализации
Сценарий 12.1. Утечка памяти из-за финализации
Воскрешение
Уничтожаемые объекты
Безопасные описатели
Слабые ссылки
Кеширование
Паттерн слабых событий
Сценарий 9.2. Утечка памяти из-за событий
Резюме
Правило 25: избегайте финализаторов
Правило 26: отдавайте предпочтение явной очистке
Глава 13. Разное
Зависимые описатели
Локальная память потока
Статические поля потока
Слоты данных потока
Внутреннее устройство локальной памяти потока
Сценарии использования
Управляемые указатели
Ссылочные локальные переменные
Возвращаемые ссылочные значения
Постоянные ссылочные переменные и in-параметры
Внутреннее устройство ссылочных типов
Управляемые указатели в C# – ссылочные переменные
И снова о структурах
Постоянные структуры
Ссылочные структуры (byref-подобные типы)
Буферы фиксированного размера
Размещение объектов и структур в памяти
Ограничение unmanaged
Непреобразуемые типы
Резюме
Глава 14. Продвинутые приемы
Span
Span
Memory
IMemoryOwner
Внутреннее устройство Memory
Рекомендации по работе с Span
Класс Unsafe
Внутреннее устройство Unsafe
Проектирование, ориентированное на данные
Тактическое проектирование
Стратегическое проектирование
Еще немного о будущем
Ссылочные типы, допускающие null
Конвейеры
Резюме
Глава 15. Интерфейсы прикладного программирования (API)
GC API
Сведения и статистические данные о сборке мусора
Уведомления GC
Контроль потребления неуправляемой памяти
Явная сборка мусора
Области без GC
Управление финализацией
Потребление памяти
Внутренние вызовы в классе GC
Размещение CLR
ClrMD
Библиотека TraceEvent
Пользовательский сборщик мусора
Резюме
Предметный указатель
Все отзывы о книге Управление памятью в .NET для профессионалов : написание более качественного, производительного и масштабируемого кода
С книгой "Управление памятью в .NET для профессионалов" читают
Внимание!
При обнаружении неточностей или ошибок в описании книги "Управление памятью в .NET для профессионалов : написание более качественного, производительного и масштабируемого кода (автор Конрад Кокоса)", просим Вас отправить сообщение на почту help@directmedia.ru. Благодарим!
и мы свяжемся с вами в течение 15 минут
за оставленную заявку