2013-01-08 55 views
2

我需要反序列化1.5GB的txt文件。我使用code.google.com/p/protobuf-net/中的protobuf-netprotobuf-net的大文件反序列化

有時,在不同的地方出現不同的異常(空引用,內存訪問衝突)時會失敗(大約50%)。我注意到,如果處理器負載很低,那麼失敗的概率正在下降。

我該怎麼做才能避免這種故障?

這裏是反序列化代碼的例子:我有錯誤代碼0000005一FatalExecutionEngineError

public static History LoadFromFile(string path) 
    { 
     using (var fileStream = File.OpenRead(path)) 
     { 
      var obj = Serializer.Deserialize<History>(fileStream);     
      return obj; 
     } 
    } 

今天,但我不知道是什麼的代碼部分可能不安全。這不是一個常量錯誤,在重新啓動應用程序後,所有內容都能正常工作。

這裏是序列化的文件,我需要反序列化的例子: https://docs.google.com/file/d/0B1XaGInC6jg3ZXBZZDA3bHh3bVk/edit

+0

困惑...的Protobuf!=文本。你能澄清你在做什麼嗎?也許有些代碼? –

+0

我明白不同之處。首先,我出於性能原因序列化大量的.txt文件中的數據。順便說一下,當結果文件的大小超過2GB時,它會失敗。我認爲它的原因是protobuf-net.dll中的int變量之後,我嘗試將數據序列化爲多個文件,然後在反序列化之後得到整個對象。但在我上面提到的一些不同的錯誤出現後。 – user1958298

+0

我將不得不調查2GB的問題,但是:被序列化的數據可能會影響它可以獲得的大小(有些東西可能需要緩衝)。順便說一句,核心谷歌protobuf文件建議對巨大的文件。但是:在再現它的過程中,你還沒有給我太多的幫助。我可以嘗試一些隨機的東西,但我不能保證我會得到一個repro。 –

回答

0

谷歌:

Protocol Buffers的不是設計來處理大量的郵件。作爲一般的經驗法則,如果您要處理大於每兆字節的消息,則可能是考慮替代策略的時候了。也就是說,Protocol Buffers非常適合處理大型數據集中的單個消息。

Source link