我发现在编译时调用了方面构造函数,然后对方面实例进行了序列化,然后在运行时对其进行了反序列化。
为什么会这样?执行反序列化而不是调用方面的构造函数会更快吗?
答案 0 :(得分: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
{
//
}