Где Вы использовали бы Компиляцию Во время выполнения C#?

11
задан David Schmitt 27 September 2008 в 18:34
поделиться

7 ответов

Как правило, я вижу используемый в случаях, где Вы в настоящее время используете Отражение и должны оптимизировать для производительности.

Например, вместо того, чтобы использовать отражение для вызова метода X Вы генерируете Динамический Метод во времени выполнения, чтобы сделать это для Вас.

7
ответ дан 3 December 2019 в 04:54
поделиться

Я видел это (компиляция во время выполнения / использование Системы. Отражение. Испустите классы) в генерации динамических прокси (Образец проекта кода) или другие средства оптимизации отражательных (мудрых временем) вызовов.

3
ответ дан 3 December 2019 в 04:54
поделиться

Можно использовать это для добавления поддержки сценариев приложению. Поскольку примеры смотрят здесь или здесь.

Довольно легко возможно опубликовать части Вашей внутренней объектной платформы к части сценариев, таким образом, Вы могли с относительной простотой добавлять что-то к своему приложению, которое имеет тот же эффект что касается примера VBA для Office.

5
ответ дан 3 December 2019 в 04:54
поделиться

По крайней мере один случай Вы могли бы использовать его, при генерировании динамического кода. Например, платформа использует это внутренне для генерации сериализаторов XML на лету. После изучения класса во времени выполнения это может сгенерировать код для сериализации / десериализовывают класс. Это затем компилирует тот код и пользователей это по мере необходимости. Таким же образом можно сгенерировать код, чтобы обработать произвольные Таблицы базы данных и т.д. и затем скомпилировать и загрузить сгенерированный блок.

2
ответ дан 3 December 2019 в 04:54
поделиться

Ну, весь код C# является скомпилированным временем выполнения, так как это - JIT (своевременный) компилятор. Я предполагаю, что Вы обращаетесь к Отражению. Испустите для создания классов и т.д. на лету. Вот пример, который я недавно видел в Xml-Rpc. Сетевая библиотека.

Я создаю интерфейс C#, который имеет ту же подпись как XML-RPC вызовы метода сервиса, например.

IMyProxy : IXmlRpcProxy
{
    [XmlRpcMethod]
    int Add(int a, int b);
}

Затем в моем коде я называю что-то как

IMyProxy proxy = (IMyProxy)XmlRcpFactory.Create(typeof(IMyProxy));

Это использует генерацию кода во время выполнения для создания полностью функционального прокси для меня, таким образом, я могу использовать ее как это:

int result = proxy.Add(1, 2);

Это затем обрабатывает XML-вызов-RPC для меня. Довольно прохладный.

2
ответ дан 3 December 2019 в 04:54
поделиться

Я использовал сервисы компилятора во время выполнения от.NET в моем тезисе диплома. В основном это было о визуальном создании некоторого графического компонента для визуализации процесса, которая сгенерирована, поскольку C# кодируют, скомпилированный в блок и могут затем использоваться в целевой системе без того, чтобы быть интерпретируемым, для создания ее быстрее и более компактной. И в качестве награды сгенерированные изображения могли быть упакованы в тот же самый блок как ресурсы.

Другое использование этого было в Java. У меня было приложение, которое должно было вывестись на печать, потенциально дорогая функция с помощью некоторого числового алгоритма (вернулся в университете), пользователь мог войти. Я поместил вводимую функцию в класс, скомпилированный, и загрузил ее, и это было затем доступно для относительно быстрого выполнения.

Так, это мои два события, где генерация кода во время выполнения была хорошей вещью.

2
ответ дан 3 December 2019 в 04:54
поделиться

что-то, для чего я использовал его, было для разрешения C# и кода VB к bu, выполненному пользователем для данного случая. Они могли ввести в строке кода (или пара строк), и она будет скомпилирована, загружена в домен приложения, и выполнена и затем разгружена. Это, вероятно, не лучший пример его использования, но пример его, тем не менее,

2
ответ дан 3 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: