Как стать автором
Обновить
0
Рейтинг

Мастер-класс по нутрям .Net Framework

Блог компании Семинары Станислава Сидристого .NET *C# *
< Прежде всего хочу отметить что я имею ввиду под internals. В данном случае я имею ввиду именно внутренние структуры данных .Net Framework. Ведь, находясь под его опекой, что мы видим? Стройную архитектуру классов, строгую типизацию, настройки безопасности. И все вроде как автомагически работает и не надо ни о чем задумываться. И вроде как даже прекрасно. Но вы по сути, находитесь в Матрице. В Матрице, о законах которой вы знаете только понаслышке. Что GC работает именно так, вам сказали. Но Вы ведь не уверенны что это именно так?

Так вот если продолжать метафору, курс направлен на программный выход из границ CLR. Прослушав курс, проделав прямо на месте практические задания, вы научитесь выходить из .Net средствами .Net. Менять структуру типов .Net не прибегая к рефлексии. Вмешиваться в процесс многопоточности, и проделывать по-настоящему шаманские вещи.

Я очень надеюсь, что программа Вам очень понравится, т.к. по сути — это результат собственных исследований, и все что тут есть, нагуглить не получится.


UPD: Чтобы было видно, напишу тут: по ссылке ниже вы попадете на timepad площадку регистрации билетов. Там вы билет Бронируете. Я вам пришлю письмо с подробностями как оплатить

Программа мастер-класса



Основы управления памятью в .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() любого .Net типа (стандарнтый sizeof считает только по Value типам)

Практика: базовые трюки

  • Получаем указатель на объект.Net, исследуем его реальную структуру
  • Практически интересный пример: передаем объекты между AppDomains без сериализации: без накладных расходов.
  • Практически интересный пример: загружаем сборку так что ее типами можно пользоваться в текущем домене, но при этом ее можно отгрузить.
  • Немного развлечемся: создадим RefType экземпляр на стеке
  • Что такое Исключение? Какие структуры данных создаются при написании try/catch/finally? Как их получить и как ими управлять? Почему исключение безошибочно пробрасывается через методы, которые не поддерживают исключения?
  • Помещаем в цепочку свой обработчик, который будет просто слушать все что через него идет.
  • Вручную, без catch перехватываем исключение
  • Как реализуется catch(){ throw; }

Практика: продвинутые трюки

  • Разрабатываем класс для выделения .Net объектов вне .Net памяти (вне SOH/LOH)
  • Пишем пул объектов вне .Net памяти
  • Вызываем конструктор по указателю — избавляемся от тормозов рефлексии
  • Практически интересный пример: Пишем ядро Memory Profiler’а — делаем дамп виртуальной памяти с распознанием .Net объектов в ней.
  • Создадим тип вручную прямой генерацией внутренних структур CLR (таблиц виртуальных методов и интерфейсов)
  • Практичеcки интересный пример: Расшарим .Net объект между процессами (через использование Paging файла)
  • Практичеcки интересный пример: Пишем метод fork(): метод, создающий поток, который стартует с того же места, на котором был вызван fork (ветвление потоков) — C++/CLI/asm


Когда и где?
  • 16-го мая, в Пятницу, с 18:00 до 23:00, Москва, 1-й Волоколамский проезд, д.10, стр. 3. Так что если отпрашиваться с работы, то совсем не на долго. Если будет много регистраций, то вторую часть проведем в субботу. Тут все welcome: пишите на почту, кому когда удобнее (sunex.development@gmail.com)


Страница регистрации:


Что от вас надо:
  • Прийти с ноутбуком и установленной Visual Studio. Я вам на почту скину перед началом ссыль на DropBox или Google Drive с файлами (будет MSIL, C++/CLI, которые писать долго без подготовки, а потому — можем все не успеть). Их — надо будет скачать и проверить.


Картинка для затравки (после вызова CloneThread, текущий поток ветвится на два, каждый из которых идет в свою часть условия if):
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Я хочу в своем городе! Shut up and take my money!!!
87.53% Ага 330
12.47% Неа, скукота 47
Проголосовали 377 пользователей. Воздержались 130 пользователей.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А в каком городе? (и вы бы при этом пошли бы)
23.1% Санкт-Петербург 88
7.61% Новосибирск 29
2.89% Калининград 11
5.51% Челябинск 21
60.89% Другое (пишем комментарий, а остальные его плюсуют) 232
Проголосовал 381 пользователь. Воздержался 141 пользователь.
Теги: .net frameworkinternals
Хабы: Блог компании Семинары Станислава Сидристого .NET C#
Всего голосов 32: ↑28 и ↓4 +24
Комментарии 42
Комментарии Комментарии 42

Похожие публикации

Лучшие публикации за сутки

Информация

Дата основания
Местоположение
Россия
Сайт
clrium.ru
Численность
1 человек (только я)
Дата регистрации
Представитель
Stanislav Sidristij

Блог на Хабре