首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#最快的序列化机制是什么?

c#最快的序列化机制是什么?
EN

Stack Overflow用户
提问于 2011-02-05 10:37:47
回答 9查看 12.1K关注 0票数 7

这是小的有效载荷。

我希望达到每100毫秒10亿美元。

标准的BinaryFormatter非常慢。DataContractSerializer比BinaryFormatter慢。

对于小型对象,协议缓冲区(http://code.google.com/p/protobuf-net/)似乎比BinaryFormatter慢!

是否还有更多的序列化机制,a应该考虑硬核编码或开源项目?

编辑:我正在序列化内存中的,然后在异步套接字上通过传输有效负载。在内存中生成的有效载荷是带有ulong标识符的小型双数组(10到500点)。

EN

回答 9

Stack Overflow用户

发布于 2011-02-05 10:42:01

您的性能要求将可用的序列化程序限制为0。定制的BinaryWriter和BinaryReader将是最快的。

票数 11
EN

Stack Overflow用户

发布于 2011-02-05 10:40:21

我本以为Protobuf会更快,即使是小物体.但你可能也想试试我的协议缓冲端口。我已经有一段时间没有使用Marc的端口了--我的端口在我上一次基准测试时更快,但我知道他从那时起就经历了一次完整的重写:)

不管你做什么,我怀疑你是否能在100毫秒内完成10亿项的串行化.我认为这是一个不合理的期望,特别是如果这是写到磁盘。(显然,如果您只是重复重写相同的内存,您将获得比序列化到磁盘更好的性能,但我怀疑这确实是您想要做的。)

如果你能给我们更多的背景,我们可能会帮助更多。例如,您能够将负载分散到多台机器上吗?(多个核心串行化到同一个IO设备是不太可能的,因为我不认为这是一个CPU绑定操作,如果它写到一个磁盘或网络。)

编辑:假设每个对象都是10个双倍(每个8个字节),带有一个ulong标识符(4个字节)。至少是每个对象84个字节。因此,您正在尝试在100 in中序列化8.4GB。我真的不认为这是可以实现的,不管你用什么。

我现在正在运行我的协议缓冲区基准测试(它们提供每秒序列化的字节),但我非常怀疑它们会给出您想要的结果。

票数 6
EN

Stack Overflow用户

发布于 2011-02-05 11:02:16

您声称小项目比BinaryFormatter慢,但是每次测量它时,我都会发现正好相反,例如:

WCF绑定使用的序列化的性能测试

我得出结论,特别是使用v2代码,这很可能是您最快的选择。如果你能贴出你的具体基准方案,我很乐意帮你看看什么是“向上”.如果你不能在这里张贴它,如果你想直接给我电子邮件(见个人资料),那也可以。我不知道你所说的时间在任何计划下都是可能的,但我是非常,我确信我能比你看到的任何东西都快得多。

使用v2代码,CompileInPlace提供了最快的结果--它允许一些IL技巧,如果编译到物理dll中,就不能使用这些技巧。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4906368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档