2013-10-24 45 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 
{ 
    // 
} 
相關問題