Содержание
- 2. Что за «Code hot reload»? Обновление кода приложения без перезапуска этого приложения. .NET Framework (4.6 +)
- 3. DirectumRX – ECM-система
- 4. DirectumRX Development Studio
- 5. Прикладная разработка DirectumRX Development Studio (IDE) Локальный сервер приложений Код платформы (framework) Прикладной код Новый прикладной
- 6. Зачем нам HotReload Development Studio (IDE) Локальный сервер приложений Код платформы (framework) Прикладной код Новый прикладной
- 7. Дополнительные ограничения и пожелания Если поменялась структура БД, одним HotReload не обойтись. HotReload и отладка в
- 8. Основная идея Избавиться от перезапуска сервера. Встраивать код напрямую в работающее приложение. Development Studio (IDE) Локальный
- 9. Решения в лоб Reflection – LoadAssembly (Shadow Copy Assemblies) Managed Extensibility Framework (MEF, VS-MEF) Mono.Cecil
- 10. Решения в лоб. Проблемы Не повлияем на уже существующие в памяти объекты. Новые объекты, создаваемые через
- 11. Emit CodeDom – компиляция С# в Assembly сразу в память в AppDomain. Emit – генерация IL-кода.
- 12. Emit. Проблемы Emit работает только с DynamicAssembly. А при компиляции CodeDom’a мы получаем обычную Assembly. Чтобы
- 13. Edit and Continue Встроенный в Visual Studio хитрый механизм, генерирующий некоторые дельты. Общедоступного API нет. Даже
- 15. Method Inject v1
- 16. Method Inject v1 Суть – замена указателя на метод. MethodInfo methodToReplace = … ; MethodInfo methodToInject
- 17. Как хранятся описания классов в .NET Заголовок MethodTable ptr Field value 1 Field value 2 …
- 18. Method Inject v1. Суть Заголовок MethodTable ptr Field value 1 Field value 2 … ObjectInstance …
- 19. Method Inject v1. Проверяем на практике Есть два класса… Target TargetMethod() Injection InjectionMethod() Injector
- 20. Method Inject v1. Проверяем на практике Исходный MethodTable TestClasses.Target.Test() TestClasses.Target.TargetMethod() TestClasses.Target.get_Value() TestClasses.Target..ctor (System.String) WinDbg + SOS
- 21. Method Inject v1. Проверяем на практике MethodTable после Inject TestClasses.Target.Test() TestClasses.Injection.InjectionMethod() TestClasses.Target.get_Value() TestClasses.Target..ctor (System.String)
- 22. Method Inject v1. Дополнительные работы Сравнить прикладные исходники и найти изменившиеся методы. Передать исходники методов на
- 23. Method Inject v1. ПРОБЛЕМА! Прекрасно работает пока мы не вызвали подменяемый метод.
- 24. Method Inject v1. ПРОБЛЕМА! …. Code ptr … … …. MyMethod1() ptr … MethodTable { Console.WriteLine(1);
- 25. Method Inject v2
- 26. Method Inject v2 public static class InjectionHelper { ... public static void Initialize() public static void
- 27. Method Inject v2 …. Code ptr … … …. MyMethod1() ptr … MethodTable IL MethodDesc Stub
- 28. Injector …. Code ptr … … …. MyMethod1() ptr … MethodTable IL MethodDesc Stub PreJitStub machine
- 29. Method Inject v2. Проблемки Нормально заработало только на .NET Framework 2.0 - 4.0 Inline маленьких методов.
- 30. Давайте вспомним, с чего мы начали Есть платформа. Она исполняет прикладной код. Мы хотим подменять прикладной
- 31. Что за прикладной код? Document Name Author Created … ServerHandlers BeforeSave() AfterSave() … ServerFunctions ServerFoo() …
- 32. Class swap Платформенный код создаёт прикладные объекты (Dependency Injection). Не возимся с методами – заменяем сразу
- 33. Class swap Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Implementation Create ServerFunctions ()
- 34. Class swap … Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Create ServerFunctions () Injector Create type C# sources
- 35. Class swap Document1 Document1ServerFunctions Foo() IDocument1ServerFunctions Document1ServerFunctions Foo() IDocument1ServerFunctions AppTypesManager Implementation Create ServerFunctions () Injector Create
- 36. Заключение В продакшен это не пошло :( Деплой мы ускорили иначе – оптимизации. Исследования – круто.
- 37. () .net core JIT disable Custom .NET CLR
- 38. THE END Асадуллин Тимур Directum, Уфа [email protected]
- 40. Скачать презентацию





































Информатика и информация. Кодирование и измерение информации
Создаем игру Gravity Defied. Construct 3
Активация почтового ящика
Гаджеты: вред или польза
Бесплатные ресурсы, платформы, сервисы для создания личных страниц (сайтов) лэндингов
Geometry Fin Interface
Презентация. Правила композиции (4 класс)
Вируальные организации как организационная форма управления знаниями
Использование ИКТ для повышения интереса детей к проектной деятельности и здоровому образу жизни
Общие сведения о языке программирования Паскаль. Начала программирования
Объектноориентированное программирование. Информатика
Системное программное обеспечение
История развития ВТ
Способы увеличения эффективности фильтра, напечатанного с применением FDM технологии
Розробка мобільного додатку ,що знаходить найвигідніші та найближчі магазини
Круговые диаграммы
Профсоюзные комьюнити в социальных сетях: тренды, инструменты, перспективы
Функции в С++. Итерация и рекурсия (лекция № 6)
Лекция 4
Warsztat kreatywny. Projekt
Языки программирования. Понятие алгоритма и его свойства
Этапы развития информационных технологий
Информация и информационные технологии
Поиск информации в интернете. 11 класс
Табличный процессор Microsoft Excel
情報通信の最新事情
Язык программирования Python
Организация хранения информации в компьютере. Файлы