2013-10-23 21 views
1

我們在.netcf目標上使用Probuf。一切運作良好。我開始使用靜態的[ProtoContract],[ProtoMember,1] ..等等。我的同事關心增加類對象的潛在開銷,所以我切換到了運行時模型,使用.add(#,「」)與相關班級「斷開」。我實際上更喜歡類中的靜態標籤,因爲如果以後重構變量名,那麼名稱本身會更新。由於我不知道底層是如何或什麼是protobuf,使用靜態標籤與運行時模型在開銷,速度等方面是否存在優勢或劣勢?Protobuf運行時和靜態標記方法之間是否有任何開銷差異?

謝謝!

+0

反正http://stevenhollidge.blogspot.com/2011/07/comparing-protobuf-net-serialisation.html包含馬克Gravell的Protobuf.NET筆者有點答覆:「你的代碼[使用RuntimeTypeModel]只是顯示* configure *的另一種方式,除非您明確地關閉了自動編譯,否則它*應該執行相同的操作。「 – user2864740

+0

我們在項目中傳遞了許多類,並且不知道在類中標記變量時是否傳遞了事件。感謝您的回覆。 – DeoGratias

+0

@ user2864740在這種情況下,特別是針對cf,還有更多的可以說... –

回答

0

我沒有異型這方面的廣泛 - 主要是因爲反射上的屬性任何開銷一次,一次只完成。冷啓動性能可能略有不同,但是:如果最終的啓動性能是您的目標,您應該儘可能使用google-code下載中提供的預編譯器。此只有與屬性模型一起工作,但具有以下優點:使用預編譯模型時無反射在運行時發生。它也會生成純粹的IL,因爲CF通常是非常受限制的,所以IIRC的運行時使用被迫使用一些反射,即使對於成員訪問等事情也是如此。最後,這意味着你可以使用「CoreOnly」而不是「Full」版本,這個版本更小,更簡單。

http://marcgravell.blogspot.co.uk/2012/07/introducing-protobuf-net-precompiler.html

+0

如果一個類標記爲upfront(非運行時),那麼類對象本身中是否還有任何其他項會與正常(非protobuf)使用期間的類。 – DeoGratias

+0

@ user2824070否;元數據基本上是惰性的,除非代碼通過反射主動查看屬性。例如,它肯定沒有每個實例的成本 –

相關問題