PostSharp — сериализация конструктора аспектов

Я обнаружил, что конструктор аспекта вызывается во время компиляции, затем экземпляр аспекта сериализуется, а затем десериализуется во время выполнения.

Почему это происходит? Быстрее ли выполнить десериализацию вместо вызова конструктора аспекта?


person bjnr    schedule 24.10.2013    source источник


Ответы (1)


Описанный процесс в основном позволяет вам инициализировать некоторые поля вашего аспекта во время компиляции, а затем десериализация будет просто восстанавливать значения при каждом запуске программы. Это может повысить производительность во время выполнения, если вычисления полей требуют больших затрат — вы можете просто запустить их один раз во время компиляции.

Например, вы можете захотеть построить строку формата аспекта ведения журнала во время компиляции, поскольку у вас уже есть информация об имени метода, параметрах, типах.

Весь жизненный цикл аспекта подробно описан на этой странице: http://doc.postsharp.net/content/aspect-lifetime

Однако в тех случаях, когда вам не нужно выполнять инициализацию во время компиляции, может быть лучше также избегать шагов сериализации. PostSharp позволяет вам сделать это с помощью MsilAspectSerializer — это фактически создаст инструкции для вызова конструктора и установки свойства и поля.

Этот случай задокументирован здесь: http://doc.postsharp.net/content/aspect-serialization

[OnMethodBoundaryAspectConfiguration(SerializerType=typeof(MsilAspectSerializer))]
public sealed MyAspect : OnMethodBoundaryAspect
{
    //
}
person AlexD    schedule 31.10.2013