c#客户端用protobuf序列化的时间很长
第一次来论坛发帖,想问问各位有过使用protobuf经验的大大给点意见,不甚感激!
unity项目,客户端开10个连接,用自带的profile分析器分析后发现两个问题:
1.同一个消息类型,第一次序列化的时间是后面的两倍之多,即,第一次发送可能需要10ms,第二次只要5ms,第三、第四。。。都是5ms左右。
2.性能不达标,我在实际测试中,10个连接,就算不考虑第一次的序列化时间,后面的每一次发送前的序列化基本都要占用0.28ms/次,这个时间已经非常多了,还要考虑到异步发送等等,基本上最后发一个消息就要占用0.5ms/次-0.7ms/次,我看网上大家测的性能和我相差甚远,故怀疑是我哪里没做好。
我的做法是这样的,.proto文件中定义消息类型,我的测试消息是三个string,一个int,一个float,总共5个字段的message。然后用protoc生成代码,然后用precompile进行预编译(这里说一句,如果不预编译,直接放到项目中,第一次序列化时间更长!),最后得到的dll和protobuf-net一起放到项目中。
调用的时候也是网上能搜到的方式
MyProtobufSerializer pbs = new MyProtobufSerializer();
MemoryStream ms = new MemoryStream();
pbs.Serialize(ms, cmd);//cmd是消息
如上,profile分析器中看到的性能显示每次开销都会在protobuf里面的一个叫做SerializeCore的函数上,基本上时间都花在这上面了。。。。头疼着,找了很多资料,希望各位大侠给点方向。。。