二进制序列化在.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);
固然,你也能够在序列化与反序列化时指定不一样的配置(),更详细的使用说明请参考[快速开始]
开源须要你们的努力,有兴趣的同窗,欢迎提交代码,一块儿完善!