2013-10-24 4 views
1

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

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

ответ

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 
{ 
    // 
}