C#中使用ProtoBuf优化百万级数据的存取性能

ProtoBuf简介

ProtoBuf是Google定义的一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。
在这里插入图片描述

使用场景

近期一个实验室上位机系统要求对实验数据的存取进行性能优化,由于大实验(长实验)的数据量很大基本百万级至千万,而数据展现又要求整体加载,因此原有设计性能很低一般500万数据要近百秒才能加载完毕,客户体验非常差,因此用C#通过ProtoBuf做了一个测试程序现分享给大家。

测试案例

先以20个浮点类型字段、1百万数据为例做测试,过程如下:
1、使用二进制序列化
在这里插入图片描述
运行界面
在这里插入图片描述
2、使用ProtoBuf序列化
在这里插入图片描述
运行界面
在这里插入图片描述
3、使用二进制序列化并压缩存储
在这里插入图片描述
运行界面
在这里插入图片描述
4、使用ProtoBuf序列化并进行压缩存储
在这里插入图片描述
运行界面
在这里插入图片描述
5、各中方式存储的文件大小如下图
在这里插入图片描述

100万数据存取性能对比

测试方式数据初始化(秒)数据保存(秒)数据加载(秒)数据显示(秒)数据加载并显示(秒)文件大小(KB)
二进制0.30440517.164081866.18072271.501148666.464526173829
ProtoBuf0.30356141.6508291.51312491.51910642.2606908188461
二进制压缩0.282995313.028172766.44488721.540263367.01523886531
ProtoBuf压缩0.33180875.12303572.75740591.5082453.42300472576

总结

对于500万数据的情况下二进制序列化基本不可用,而ProtoBuf基本在15~20秒之间完成加载并显示。通过这个测试得出如果在追求性能极致额情况下直接使用ProtoBuf序列化和反序列化,如果数据要长时间保存考虑磁盘空间有效利用的话可以采用ProtoBuf压缩方式,性能稍有损失,但是文件压缩率很高可以很好的提高磁盘空间利用。

完整源代码下载

完整源代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值