在我的遊戲中,我使用相關類的屬性[Serializable]
將我的廣告系列(地圖和關卡集合)串入到一個文件中,但現在廣告系列的尺寸接近20MB,並且對於序列化/解串行而言,速度變得太慢。你可以反序列化一個使用[Serializable]屬性到現在實現ISerializable的類的文件嗎?
目前大約需要11秒才能將活動從磁盤反序列化到內存中。
我知道protobuf-net,但我現在想嘗試ISerializable
的方法。在一個類上實現ISerializable
接口是否會干擾該類的以前版本的反序列化,該版本只使用[Serializable]
和[NonSerialized]
屬性進行序列化?
我想我可以創建一個ISerializable
每個相關類的副本並將數據從一個副本複製到另一個,但這聽起來像是一場災難。
是否可以告訴BinaryFormatter
忽略任何ISerializable
屬性並僅使用[Serializable]
和[NonSerialized]
屬性進行反序列化?
更新1:我使用自定義活頁夾來修復類型和程序集名稱的差異,但這不會在不使用時造成顯着差異。
更新2: SSD嵌入式內容deserialisation大約需要12.2S, SSD磁盤文件deserialisation大約需要11.4s, MemoryStream
系列化大約需要3.4s和 MemoryStream
deserialisation大約需要11.2s。 我感到很傻,但我忘了提及這一切都是在一個單獨的線程上完成的。我會增加它的優先級,看看是否會改變任何東西。
更新3:加載線程優先級設置爲Highest
修剪不到一秒鐘。
謝謝你的時間。
那些20 MB未壓縮或壓縮的數據?只是想知道磁盤I/O是否可能是延遲的主要原因,以及是否有壓縮數據可能實際上有幫助。 –
現在,20MB的文件很可能會在不到1秒的時間內被讀取,緩存並完全放入內存中,即使是從硬盤驅動器中。我懷疑所花費的時間更多的是與反序列化本身有關。 – bazza
我同意其他答覆。時間可能是文件的讀/寫時間,而不是序列化的時間。我會運行一個實驗並將文件讀入內存流。然後從內存流中序列化。您可以添加時間來查看代碼,以瞭解需要多少時間讀入內存流以及序列化的時間。 – jdweng