- Мастер-класс
- Место
Введение
Достаточно специфичный мастер-класс, который покрывает очень интересную тему: тему внутренностей.Net Framework. Интерес к данному мероприятию должен возникнуть как минимум потому что эта тема практически не освещена в Интернете и знания, которые вы получите, помогут Вам взглянуть на платформу под совершенно новым углом. А так ли она безопасна? А так ли много там "магии", позволяющей нам не думать о безопасности? Это авторский проект и является результатом исследований с отладчиком: каково строение.Net объектов в памяти и что с этим можно сделать.
Что будет рассказано на Мастер-Классе по.Net Internals:
Основы управления памятью в .Net
- Small Objects Heap/Large Objects Heap
- Thread Stack
- High / Low Frequency Heaps, Code Heap, Stubs Heap
- Ephemeral Segments
- Pages
- Memory mapped files
Как устроены объекты в памяти
- Как устроен любой Object? Что он содержит?
- MethodTable
- EEClass
- Son Of Strike (SOS) расширение отладчика для просмотра внутренностей объектов.Net
- Основные команды отладчика
- Как устроена строка в памяти? Как вычислить ее реальный sizeof(.)?
- Что из себя представляет Array? 4 типа массивов.
- Считаем sizeof() любого .Net типа (стандарнтый sizeof считает только по Valueтипам)
Практика: базовые трюки
- Получаем указатель на объект.Net, исследуем его реальную структуру
- Практически интересный пример: передаем объекты между AppDomains без сериализации: без накладных расходов.
- Практически интересный пример: загружаем сборку так что ее типами можно пользоваться в текущем домене, но при этом ее можно отгрузить.
- Немного развлечемся: создадим RefType экземпляр на стеке
- Что такое Исключение? Какие структуры данных создаются при написани try/catch/finally? Как их получить и как ими управлять? Почему исключение безошибочно пробрасывается через методы, которые не поддерживают исключения?
- Помещаем в цепочку свой обработчик, который будет просто слушать все что через него идет.
- Вручную, без catch перехватываем исключение
- Как реализуется catch(){ throw; }
Практика: продвинутые трюки
- Разрабатываем класс для выделения .Net объектов вне .Net памяти (вне SOH/LOH)
- Пишем пул объектов вне .Net памяти
- Вызываем конструктор по указателю — избавляемся от тормозов рефлексии
- Практически интересный пример: Создаем прокси-тип, подменяя указатели на скомпилированные тела методов
- Практически интересный пример: Пишем ядро Memory Profiler’а — делаем дамп виртуальной памяти с распознованием .Net объектов в ней.
- Создадим тип вручную прямой генерацией внутреених структур CLR (таблиц виртуальных методов и интерфейсов)
- Практичеки интересный пример: Расшарим .Net объект между процессами (через использование Paging файла)
Официальный сайт события
http://braingems.timepad.ru/event/120644/
Контакты организаторов
Станислав
sunex.development@gmail.com