最快的c#序列化器
本文关键字:序列化 | 更新日期: 2023-09-27 17:52:56
我需要序列化一个OrderedDictionary,而且速度要快。我不关心安全性或人类的可读性,我只需要最快的方式将OrderedDictionary写入文件并再次读取它,只要序列化是一致的(相同的键值对集合,相同的文件内容)。BinaryFormatter是最好的选择吗?
您可以查看一下protobuf,这是Google的序列化格式。c#有几种实现:
- protosharp
- protobuf-net
- protobuf-csharp-port
网上有一个性能比较
BinaryFormatter几乎肯定是内建序列化器中最快的,但是衡量备选方案并进行检查并不困难。
如果你正在寻找最快的方法,额外的编码不是问题,你可以试试这个:
序列化:1. 将字典数据写入内存中的字节数组。假设你的字典不是太大,这应该是相对便宜的,从时间的角度来看。2. 写一个包含#记录的小头文件,然后将数组写入file.
反序列化:1. 读取# items并将其作为容量实例化OrderedDictionary。2. 将数据读入数组,实例化每个对象,并回写到OrderedDictionary。
我认为这不会比更传统的方法快很多,但是如果你试图找出每一点性能,也许值得一试。
一个更快的方法是写你自己的IOrderedDictionary与你的对象的亲密知识,并让它存储他们的方式优化快速序列化(例如,一个平坦的缓冲区,可以快速地猛烈到磁盘)。也许更快的方法是使用一些索引文件格式(也许是SQLite?)并为其编写一个缓存IOrderedDictionary适配器。这将让您平摊反序列化成本。