Сериализация скомпилированных делегатов - PullRequest
1 голос
/ 27 августа 2011

Скажите, что у меня есть такой класс:

public class Test
{
     public Func<string, bool> DoSomething { get; set; }
}

У меня есть другой код, который динамически анализирует строку и компилирует делегат.

Чтобы установить сцену, у меня есть другое приложение на другом сервере, которому нужно выполнить этот код, поэтому я хочу сериализовать его и отправить по кабелю для выполнения. Я мог бы послать строку, содержащую информацию, необходимую для воссоздания делегата, но создание делегата кажется дорогой операцией, поскольку мне придется многократно выполнять эту операцию снова и снова. Есть ли способ сериализации этого делегата?

1 Ответ

0 голосов
/ 27 августа 2011

Если вы беспокоитесь о разборе одной и той же строки и многократной компиляции результата, вам следует использовать кеширование.

Просто внедрите кеш с помощью чего-то вроде Dictionary<string, YourDelegate> на сервере.Когда вы получаете строку, проверьте ее в кеше и, если она отсутствует, создайте делегат.

Если строка слишком длинная (что будет означать вызов GetHashCode(), который используется Dictionary(это может занять слишком много времени), вы можете назначить некоторые идентификаторы или имена делегатам:

Клиент создает строку и уникальный идентификатор для нее (возможно, Guid).Он отправляет на сервер сообщение: «Вот спецификация для делегата с этим идентификатором».А потом еще одна поговорка: «использовать делегат с этим идентификатором».Второе сообщение может быть вызвано повторно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...