Protocol buffers protobuf网络与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中,它在许多方面做得更进一步—使用低级别的元编程,如果您需要(完全可选)

我知道这两个库的特性和设计,但我没有发现这两个库之间有任何直接的性能比较。这两个都是非常棒的libs。关于设计,我认为protobuf csharp端口应该稍微快一点,因为反射更少,对吗

此外:

  • 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环境中
一个微妙的区别,也许——事实上,两者都会成为一个值得.NET使用的序列化API

因此,如果您的主要目标是在同一团队中积极工作的异构环境之间进行互操作,那么protobuf csharp port可能更适合您


我也有点。。。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