C#
— невероятно гибкий язык. На нем можно писать не только бэкэнд или десктопные приложения. Я использую C#
для работы, в том числе, и с научными данными, которые накладывают определенные требования на инструменты, доступные в языке. Хотя netcore
захватывает повестку дня (учитывая, что после netstandard2.0
большинство фич как языков, так и рантайма, не бэк-портируются в netframework
), я продолжаю работать и с легаси-проектами.
В этой статье я рассматриваю одно неочевидное (но, наверное, желаемое?) применение Span<T>
и отличие реализации Span<T>
в netframework
и netcore
из-за особенностей clr
.
Рубрика «MSIL»
Unsafe.AsSpan: Span<T> как замена указателям?
2019-08-26 в 20:23, admin, рубрики: .net, C#, MSIL, reflection, ненормальное программированиеКомпактный сериализатор для кэша c использованием System.Reflection.Emit
2018-05-18 в 12:12, admin, рубрики: .net, C#, MSIL, кодогенерация, оптимизация, Разработка веб-сайтов, Серверная оптимизация, серверное кэширование
В современных сервисах без кэша никуда: доступ к данным в персистентной базе – дело долгое и затратное, поэтому добавление промежуточного хранилища для наиболее часто используемых данных значительно его ускоряет. Держать в кэше информацию можно самую разную и в разной форме: и строки, и списки, и состояние сессии, и многое другое. В данной статье речь пойдёт об одном из способов хранении в кэше «плоских» объектов, не имеющих вложенных классов и циклических ссылок.
Читать полностью »
Маппинг в C# на примере сериализатора для AMF
2017-01-25 в 16:13, admin, рубрики: .net, amf, amf3, attribute, attributes, C#, deserialization, deserialize, dynamic, escorp, example, examples, exomode, flex, fluorine, fluorinefx, generation, il, MSIL, opcode, opcodes, programming, serialization, serialize, technologies, technology, tutorial, tutorials, type, изучение, мануал, маппинг, обучение, отображение, отражение, пожалуй, Программирование, рефлексия, рефлекшн, руководство, технологии, технология, урок, уроки, хватит.Приветствую, друзья. Сегодня речь пойдёт о реализации маппинга на C#, а так же о применении сей реализации в решении реальных задач на примере отправки данных AMF на сервер. Всё нижеизложенное не претендует на какие-либо эталоны реализации алгоритмов и паттернов проектирования кода, это лишь описание одного из множества, далеко не всегда очевидных для новичков, решений.
В процессе изучения статьи, Вы узнаете как реализовать собственные атрибуты и как их применять, познакомитесь с методами расширений типов и применением рефлексии на практике, узнаете об основах MSIL в целом и OpCodes в частности, а так же о том, как можно сериализовать объекты в AMF с помощью потоков.
Читать полностью »
Заполнение текстовых шаблонов данными на основе модели. Реализация на .NET с использованием динамических функций в байт-коде (IL)
2015-03-01 в 7:30, admin, рубрики: .net, C#, cil, generator, il, MSIL, parser, pattern, байт-код, генератор кода, многобукоффПролог
Недавно возникла задача массовой рассылки писем, текст которых формируется на основе шаблона, в котором помимо статического содержимого есть информация о получателе и фрагменты текста. В моем случае это шаблон автоматического оповещения подписчиков о публикации новых статей, соответственно в нем есть обращение к адресату и красиво оформленная ссылка на публикацию.
Сразу возник вопрос — как это реализовать? На ум приходили различные решения, начиная от задания в шаблоне неких константных значений, которые бы заменялись на данные модели, и заканчивая полноценными вьюхами Razor (сайт построен на MVC 5).
После непродолжительной битвы с самим собой, я пришел к выводу, что эту достаточно распространенную задачу пора решить раз и навсегда, и что ее решение должно быть не очень сложным (т.е. не должно зависеть от библиотек, не входящих в состав .NET Framework 4), но при этом достаточно функциональным, чтобы решать поставленную задачу и иметь запас по расширяемости.
В данной статье я расскажу о решении на основе генератора байт-кода, которое удовлетворяет этим требованиям, а также прокомментирую наиболее интересные фрагменты кода.
Если вас интересует только шаблонизатор, ссылочки ниже:
Исходные коды шаблонизатора (Genesis.Patternizer) и тестовой консоли в проекте на SourceForge: https://sourceforge.net/projects/open-genesis/?source=navbar
Или в архиве одним файлом: Patternizer.zip
Генерируем на .Net
2013-03-12 в 19:24, admin, рубрики: .net, .net frameowrk, MSIL, кодогенерация, метки: .net frameowrk, MSIL, кодогенерацияГенерировать код на .Net можно несколькими способами:
- Reflection Emit. Доступен с версии .Net 1.0.
- CodeDom. Позволяет создавать динамический код из представления CodeDom или напрямую из исходников, написанных на одном из высокоуровневых языков, например C#, VB или JScript. Доступен с версии .Net 1.0.
- Expression trees. Доступен с версии .Net 3.5. Позволяет создавать динамический код из представления Expression.
В этой статье я хочу рассказать про технику кодогенерации с использованием Reflection Emit.
Читать полностью »
Инъекция кода в .NET CLR: изменение IL-кода во время выполнения программы
2012-10-11 в 7:48, admin, рубрики: .net, clr, MSIL, системное программирование, метки: .net, c++, clr, MSIL, системное программированиеПредисловие
Изменение .NET метода MSIL кода во время выполнения приложения – это очень круто. Это настолько круто, что можно перехватывать вызовы функций (hooking), сделать защиту своего ПО и другие удивительные вещи. Именно поэтому мне уже давно хотелось это осуществить, но была одна проблема – MSIL код компилируется в машинный код с помощью JIT перед тем, как мы сможем что-либо с этим кодом сделать. А так как .NET CLR не документирована и изменяется от версии к версии, то мы и будем искать стабильный и надёжный путь, независимый от точного расположения адресов в памяти.
Читать полностью »