PostSharp - 方面构造函数序列化

时间:2013-10-24 05:39:10

标签: aop postsharp aspect

我发现在编译时调用了方面构造函数,然后对方面实例进行了序列化,然后在运行时对其进行了反序列化。

为什么会这样?执行反序列化而不是调用方面的构造函数会更快吗?

1 个答案:

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