2012-09-17 41 views

回答

2

對於一些性能方面的原因,編譯器往往會使None = null。我認爲最好的辦法是,然後包裹整個事情的選項

像這樣

let f = System.Runtime.Serialization.Formatters.Binary.BinaryFormatter() 
let m = System.IO.MemoryStream() 
f.Serialize (m,Some(None)) 

一個額外層,然後你只是刪除多餘的Some當你反序列化

+1

一些無:D。有趣但很有魅力! –

1

嘗試使用不同的serializer ,如NetDataContractSerializer。從我所知道的BinaryFormatter被認爲是遺留的,並且也有其他一些問題,例如this

+0

好點!我已經更改爲'NetDataContractSerializer'和None無效;)謝謝 –

+0

我測試了NetDataContractSerializer,我的應用程序的整體性能下降了約。 30%。所以看起來,由於性能的原因,我必須留在BinaryFormatter中...... –

+0

從我的測試中我發現NDC與BF的性能特徵有所不同,具體取決於您嘗試序列化的對象圖的結構。 NDC原則上(但並不總是)比BF慢,並且產生更大的序列化(由於它使用xml,所以大約大10倍)。然而,NDC比BF更健壯,但在某些情況下可能會失敗(例如,非常大的列表會產生堆棧溢出)。您可以採用混合方法,例如通過向任務調用NDC來處理BinaryFormatter異常。 – eirik

相關問題