我在我們的項目之一中使用protobuf-net來序列化/反序列化大量同類對象。它工作得很好,速度非常棒。只是有一個問題,但。雖然反序列化可以使用linq(或任何其他機制)來指定過濾條件,以便僅加載滿足該條件的對象被加載?反序列化所有對象並應用linq過濾器是相當簡單的,但我想減少加載到內存中的對象的數量。過濾條件可以是相當動態的,所以字符串類型的機制會很棒(類似dlinq?)。使用過濾器反序列化Protobuf-Net對象
3
A
回答
2
不,沒有什麼內置的,但如果你有一個明確定義的用例,我當然可以看看(我是作者)。
現在,我會建議使用的一些變種:
var found = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).FirstOrDefault(obj => obj.Foo = "bar");
if(found != null) {...}
這將在找到匹配,並迅速釋放對象收集(希望能在GEN-0)短路。或爲多個項目,也許是:
var list = Serializer.DeserializeItems<A>(source, PrefixStyle.Base128,
Serializer.ListItemTag).Where(obj => obj.Foo = "bar").ToList();
(這又及時釋放不匹配的項目)
要在一般情況下做到這一點(特別是對於更復雜的查詢),我想不出沒有實現目標,所以這是可能儘可能接近,除非有一個非常特定(和簡單)的場景,發生與底層數據存儲很好地對齊(例如,過濾器總是在「標籤1」上)。
1
通常情況下,除非是原始數據,否則您將無法將您的序列化數據視爲任何內容,直到完成反序列化。 您可能會從過濾中獲得一些內存好處,但除非這是一個問題,否則不值得打擾。
您可能能夠過濾傳入的序列化表示形式,但要權衡所需的時間和精力,以便實現這一點。
大多數情況下(在桌面或服務器環境中)最好使用可用的簡單選項,然後再使用需要。
相關問題
- 1. 通過protobufnet反序列化來自Redis的大量用戶定義對象集時的性能問題
- 2. 通過序列化/反序列化維護對象引用
- 3. 使用Json.Net反序列化Json對象
- 4. 使用GSONConverter反序列化gson對象
- 5. 反序列化序列化對象
- 6. 使用序列化器過濾。模型序列化器
- 7. 使用DataContractSerializer序列化和反序列化多個對象
- 8. 使用C#序列化Java可反序列化的對象
- 9. 使用BinaryFormatter序列化和反序列化對象圖
- 10. 使用JSON序列化和反序列化對象
- 11. 如何使用cbor2序列化和反序列化對象?
- 12. Memcached對象反序列化
- 13. GSON反序列化對象
- 14. C#反序列化對象
- 15. Newtonsoft反序列化對象
- 16. jsonmodel反序列化對象
- 17. 反序列化到對象
- 18. 反序列化YAML對象
- 19. 反序列化對象
- 20. 反序列化JSON對象
- 21. 反序列化到對象
- 22. JSON對象反序列化
- 23. 反序列化EventValidation對象
- 24. 對象反序列化
- 25. 在ruby中通過rabbitmq序列化和反序列化對象
- 26. 通過Lift-JSON序列化和反序列化json對象
- 27. 反序列化對象內的對象
- 28. 反序列化對象到類對象
- 29. 序列化一個對象和反序列化爲對象
- 30. JMS序列化器反序列化對象的ArrayCollection
(在這種情況下,嚴格來說不是「文本」,但我同意你的總體要點) – 2011-01-31 11:31:40
對,編輯:-) – 2011-01-31 11:33:40