二進制序列化在.NET中有不少使用場景,如咱們使用分佈式緩存時,一般將緩存對象序列化爲二進制數據進行緩存,在ASP.NET中,不少中間件(如認證等)也都是用了二進制序列化。git
在.NET中咱們一般使用System.Runtime.Serialization.Formatters庫中的BinaryFormatter來進行二進制序列化,但此庫存在如下缺點:github
爲了解決這些缺陷,咱們開源了一款獨立的高性能.NET二進制序列化庫Xfrogcn.BinaryFormatter([Github] [Gitee]),該庫參考了System.Text.Json庫,經過Span與Emit大大提高了序列化性能。此庫目標爲.NET Standard 2.1。數組
Xfrogcn.BinaryFormatter具備如下優勢:緩存
與.NET內置的System.Runtime.Serialization.Formatters.Binary.BinaryFormatter二進制序列化對比,性能最高可達到它的4倍以上,而序列化結果的大小僅只有它的75%。安全
如下爲經過test/BinaryFormatter.Benchmark性能測試項目獲取的性能數據,其中:框架
Method | Categories | Mean |
Json | Stream | 61.41 μs |
XfrogcnBinary | Stream | 92.97 μs |
SystemBinaryFormatter | Stream | 291.37 μs |
Json_Bytes | Bytes | 59.79 μs |
XfrogcnBinary_Bytes | Bytes | 88.67 μs |
Method | Categories | Mean |
Json | Stream | 100.12 μs |
XfrogcnBinary | Stream | 96.34 μs |
SystemBinaryFormatter | Stream | 334.68 μs |
Json_Bytes | Bytes | 80.13 μs |
XfrogcnBinary_Bytes | Bytes | 92.14 μs |
Xfrogcn.BinaryFormatter庫的使用很是簡單,基本與System.Text.Json一致:分佈式
序列化到流:ide
MemoryStream ms = new MemoryStream(); await Xfrogcn.BinaryFormatter.BinarySerializer.SerializeAsync(ms, data);
序列化到byte數組:性能
var data = Xfrogcn.BinaryFormatter.BinarySerializer.Serialize(data);
從流中反序列化:測試
var obj = await Xfrogcn.BinaryFormatter.BinarySerializer.DeserializeAsync(stream);
從byte數組反序列化:
var obj = Xfrogcn.BinaryFormatter.BinarySerializer.Deserialize(data);
反序列化爲指定類型:
var obj = await Xfrogcn.BinaryFormatter.BinarySerializer.DeserializeAsync<T>(stream); 或者: var obj = Xfrogcn.BinaryFormatter.BinarySerializer.Deserialize<T>(data);
固然,你也能夠在序列化與反序列化時指定不一樣的配置(),更詳細的使用說明請參考[快速開始]
開源須要你們的努力,有興趣的同窗,歡迎提交代碼,一塊兒完善!