这是小的有效载荷。
我希望达到每100毫秒10亿美元。
标准的BinaryFormatter非常慢。DataContractSerializer比BinaryFormatter慢。
对于小型对象,协议缓冲区(http://code.google.com/p/protobuf-net/)似乎比BinaryFormatter慢!
是否还有更多的序列化机制,a应该考虑硬核编码或开源项目?
编辑:我正在序列化内存中的,然后在异步套接字上通过传输有效负载。在内存中生成的有效载荷是带有ulong标识符的小型双数组(10到500点)。
发布于 2011-02-05 10:42:01
您的性能要求将可用的序列化程序限制为0。定制的BinaryWriter和BinaryReader将是最快的。
发布于 2011-02-05 10:40:21
我本以为Protobuf会更快,即使是小物体.但你可能也想试试我的协议缓冲端口。我已经有一段时间没有使用Marc的端口了--我的端口在我上一次基准测试时更快,但我知道他从那时起就经历了一次完整的重写:)
不管你做什么,我怀疑你是否能在100毫秒内完成10亿项的串行化.我认为这是一个不合理的期望,特别是如果这是写到磁盘。(显然,如果您只是重复重写相同的内存,您将获得比序列化到磁盘更好的性能,但我怀疑这确实是您想要做的。)
如果你能给我们更多的背景,我们可能会帮助更多。例如,您能够将负载分散到多台机器上吗?(多个核心串行化到同一个IO设备是不太可能的,因为我不认为这是一个CPU绑定操作,如果它写到一个磁盘或网络。)
编辑:假设每个对象都是10个双倍(每个8个字节),带有一个ulong标识符(4个字节)。至少是每个对象84个字节。因此,您正在尝试在100 in中序列化8.4GB。我真的不认为这是可以实现的,不管你用什么。
我现在正在运行我的协议缓冲区基准测试(它们提供每秒序列化的字节),但我非常怀疑它们会给出您想要的结果。
发布于 2011-02-05 11:02:16
您声称小项目比BinaryFormatter慢,但是每次测量它时,我都会发现正好相反,例如:
我得出结论,特别是使用v2代码,这很可能是您最快的选择。如果你能贴出你的具体基准方案,我很乐意帮你看看什么是“向上”.如果你不能在这里张贴它,如果你想直接给我电子邮件(见个人资料),那也可以。我不知道你所说的时间在任何计划下都是可能的,但我是非常,我确信我能比你看到的任何东西都快得多。
使用v2代码,CompileInPlace提供了最快的结果--它允许一些IL技巧,如果编译到物理dll中,就不能使用这些技巧。
https://stackoverflow.com/questions/4906368
复制相似问题