当前位置 博文首页 > 性能超四倍的高性能.NET二进制序列化库
二进制序列化在.NET中有很多使用场景,如我们使用分布式缓存时,通常将缓存对象序列化为二进制数据进行缓存,在ASP.NET中,很多中间件(如认证等)也都是用了二进制序列化。
在.NET中我们通常使用System.Runtime.Serialization.Formatters库中的BinaryFormatter来进行二进制序列化,但此库存在以下缺点:
为了解决这些缺陷,我们开源了一款独立的高性能.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一致:
序列化到流:
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);
当然,你也可以在序列化与反序列化时指定不同的配置(),更详细的使用说明请参考[快速开始]
开源需要大家的努力,有兴趣的同学,欢迎提交代码,一起完善!