Protocol buffers protobuf网络与protobuf csharp端口的性能
我知道这两个库的特性和设计,但我没有发现这两个库之间有任何直接的性能比较。这两个都是非常棒的libs。关于设计,我认为protobuf csharp端口应该稍微快一点,因为反射更少,对吗 此外:Protocol buffers protobuf网络与protobuf csharp端口的性能,protocol-buffers,protobuf-net,Protocol Buffers,Protobuf Net,我知道这两个库的特性和设计,但我没有发现这两个库之间有任何直接的性能比较。这两个都是非常棒的libs。关于设计,我认为protobuf csharp端口应该稍微快一点,因为反射更少,对吗 此外: protobuf net V2将于何时发布?有什么计划吗,马克 Jon,会有新版本的protobuf csharp端口吗 谢谢。重新表演;protobuf net旨在尽可能少地执行该反射,并在此之后创建高效的数据访问代码。在v2中,它在许多方面做得更进一步—使用低级别的元编程,如果您需要(完全可选)
- protobuf net V2将于何时发布?有什么计划吗,马克
- Jon,会有新版本的protobuf csharp端口吗
谢谢。重新表演;protobuf net旨在尽可能少地执行该反射,并在此之后创建高效的数据访问代码。在v2中,它在许多方面做得更进一步—使用低级别的元编程,如果您需要(完全可选),预生成独立序列化程序dll—因此在运行时,反射成本介于最小(如果使用运行时元编程)到零(如果使用预生成)之间 再释放;“准备就绪时”;生活是疯狂的忙碌,但是完整的.NET和iPhone都可以使用alpha dll(后者可能适用于大多数较轻的运行时,因为iPhone是限制性最强的)。最终,现实是(如无主办方等),它将落后于工作和家庭等事情——不过,我尽量在可能的时候找到时间 我认为更明智的比较是目标;protobuf net的设计可以轻松地安装到您现有的DTO或域模型上,而无需进行大量的返工,或者用于代码优先的场景。它还支持从.proto生成,但这不是主要目标(当然是非常可取的)。它还使用了一个非常不同的API,它使用的是常见的.NET隐喻,而不是常见的protobuf隐喻 或者换一种说法:
- protobuf csharp端口专注于protobuf,并将C#/.NET添加到现有protobuf环境中
- protobuf net专注于C#/.net,并将protobuf添加到现有的C#/.net环境中
我也有点。。。protobuf是“松散”的,所以我对继承、完整图形等方面没有(好的,最小的)愧疚感,这在.NET生态系统中很常见,但在protobuf中没有直接映射。当然,我可以更多地了解WCF之类的工具(程度较低的是:远程处理)。当我使用protobuf csharp端口时,我在这个库中发现了一个bug。 例如,当我创建这样的消息时:
message CalculateInfo{
required string CalStarttime=1;
optional string CalEndtime=2;
required string Smiles=3;
optional string CAS=4;
optional string ChName=5;
optional string EnName=6;
required string Param=7;
required bytes Result=8;
required bool IsFinished=9;
}
message GetAllCalulateResponse{
required bool isSuccessful = 1;
required int32 Count=2;
repeated CalculateInfo History=3;
}
类似这样的代码(在python中):
msg_resp.Count=len(结果集)
C#代码将出现此错误:
<强>解析协议消息时,输入在字段的中间意外终止。这可能意味着输入被截断或嵌入的消息误报了自己的长度。
当我使用小calculateInfo[cnt].Result时,它再次工作 哇!谢谢你的详细回答(一如既往——关于我最近读到的关于protobuf net的50篇帖子)。正如我所说的,我知道这两个项目的原理,事实上,我想使用其中一个来将Silverlight客户端集成到现有的protobuf环境中:。proto first-->java(客户端+服务器,包括xml/json格式化程序)、c#,。。。但是,我可以同时使用这两个lib(当前版本)。但我真正感兴趣的是性能比较——即使只是几个女士。我说得对吗,protobuf csharp端口(理论上)不能比protobuf net慢?@Stephan他们可能是一样的标准;根据编码的实现方式,可能会导致两个方向上的差异。然而,在这两种情况下,真正的瓶颈是带宽(磁盘或网络)。这两者在导线上应该几乎相同。简言之,两者都不是“明显”更快或更慢。尽管如此,请随意介绍一下。好的,马克,谢谢你们的回答和你们在protobuf网络上付出的所有努力。
calculateInfo = [None] * msg_resp.Count
cnt = 0
for result in resultSets:
calculateInfo[cnt] = msg_resp.History.add()
calculateInfo[cnt].CalStarttime = str(result.calculateStartTime)
calculateInfo[cnt].CalEndtime = result.calculateEndTime.strftime('%Y-%m-%d %X')
calculateInfo[cnt].IsFinished = result.isFinished
calculateInfo[cnt].Param = result.paramInfo
calculateInfo[cnt].Result = str('ff'*1000) #result.result
calculateInfo[cnt].Smiles = result.smilesInfo.smilesInfo
calculateInfo[cnt].CAS = result.smilesInfo.casInfo
nameSets = CompoundName.objects.filter(simlesInfo=result.smilesInfo.pk,isDefault=True)
for nameSet in nameSets:
if nameSet.languageID.languageStr == Chinese_Name_Label:
calculateInfo[cnt].ChName = nameSet.nameStr
elif nameSet.languageID.languageStr == English_Name_Label:
calculateInfo[cnt].EnName = nameSet.nameStr
cnt = cnt +1