1

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

为什么会发生这种情况?执行反序列化而不是调用方面的构造函数是否更快?

4

1 回答 1

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
{
    //
}
于 2013-10-31T09:57:08.887 回答