2012-03-24 37 views
1

我想通過網絡發送序列化整數時減少消息大小。 在下面的章節中,buff.Length是256--對於高效率的開銷來說非常重要! 如何將其降至最低(4字節+最小開銷)?如何最小化序列化數據 - 二進制序列化有巨大的開銷

  int val = RollDice(6); 
      // Should 'memoryStream' be allocated each time! 
      MemoryStream memoryStream = new MemoryStream(); 
      BinaryFormatter formatter = new BinaryFormatter(); 
      formatter.Serialize(memoryStream, val); 
      byte[] buff = memoryStream.GetBuffer(); 

由於提前, --- KostaZ

+0

formatter.Serialize(memoryStream,val,Nothing)? – alexander 2012-03-24 17:31:25

+0

爲什麼當目標是網絡時序列化到內存?直接序列化到網絡,然後網絡提供內存而不是CPU。 – EJP 2012-03-25 09:40:17

回答

1

看一看protobuf.net ......這是一個非常好的序列LIB(你可以得到它的NuGet)。此外,理想情況下,您應該在內存流中使用「使用」語句。

要回應以下評論,最有效的方法取決於您的使用案例。如果你確切地知道你需要序列化什麼,並且不需要通用序列化器,那麼你可以編寫自己的二進制格式化器,它可能根本沒有開銷(這裏有一些細節custom formatters)。

這個link有一個比較BinaryFormatter和protobuf.net供您參考。

+0

是的,這很好。但是,你可以發佈一些鏈接,說明原始值在PB中的開銷較低嗎? Downvoted。 – 2012-03-24 17:18:34

+0

公平點。我不知道它會有一個較低的值,但我想我的觀點是它是比二進制格式化器更好的(IMO)序列化庫。開銷將取決於serializion庫,所以我猜他可以實現他自己的序列化格式化程序,這將實現4bytes加上「最小」(如果他只是序列化整數可能不算什麼),那麼這將是最好的方法,但爲了「儘量減少序列化數據」的一般用途答案,我會建議protobuf.net。 – 2012-03-24 17:23:35

+0

Jon Skeet還有[dotnet-protobufs](https://github.com/jskeet/dotnet-protobufs) – 2012-03-24 17:29:58

相關問題