首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >protobuf net与protobuf csharp的性能

protobuf net与protobuf csharp的性能
EN

Stack Overflow用户
提问于 2011-04-19 20:18:56
回答 2查看 3K关注 0票数 3

我知道这两个库的特性和设计,但我还没有发现这两个库之间有任何直接的性能比较。两个人都是很棒的说谎者。关于设计,我认为应该更快一点,因为反射较少,对吗?

此外:

  • 什么时候发布protobuf V2?有什么计划吗,马克?
  • ,会不会有一个新版本的原始港,Jon?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-19 20:48:58

重新执行性能;protobuf-net旨在尽可能少地执行该反射,在此之后创建高效的数据访问代码。在v2中,它在许多方面更进一步--使用更低级别的元编程,如果您想要它(完全是可选的),那么在运行时,独立序列化程序dll的预生成成本介于最小(如果使用运行时元编程)到零(如果使用前生成)之间。

重新发布;“当它准备好了”;生活非常繁忙,但是完全的.NET和iPhone都可以使用alpha dll (后者可能会在大多数较轻的运行时起作用,因为iPhone是最受限制的)。最终,现实是(作为非赞助的,等等)它将落后于工作和家庭之类的事情--不过,我尽量找时间。

我认为更明智的比较是目标;protobuf的设计是为了很容易地安装到您现有的DTO或域模型上,而不需要进行大量的重新工作--或者在代码优先场景中使用。它也支持.proto的下一代,但这并不是主要的目标(但当然是非常可取的)。它还使用了一个非常不同的API,面向的是常见的.NET隐喻,而不是普通的原型隐喻。

或者换个说法:

  • protobuf-csharp-port专注于原型,并将C# / .NET添加到现有的protobuf landscape
  • protobuf-net重点关注C# / .NET,并将protobuf添加到现有的C# / .NET景观

中。

一个微妙的区别,也许--事实上,这两者都会为.NET提供一个有价值的序列化API。

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

我也有点..。与protobuf“松散”,所以我没有(嗯,最小)愧疚,有点超出标准规范(同时保持在协议定义内)在继承,全图等鞋跟,这些是常见的.NET生态系统,但没有直接的地图在原型。当然,我可以更多地查看像WCF这样的工具(在较小的程度上:远程处理)。

票数 9
EN

Stack Overflow用户

发布于 2012-11-20 02:15:51

当我使用protobuf-csharp时,我在这个库中发现了一个bug。例如,当我创建如下消息时:

代码语言:javascript
复制
    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(resultSets)

代码语言:javascript
复制
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 

C#代码将发生以下错误:在解析协议消息时,输入在字段中间意外结束。这可能意味着输入已经被截断,或者嵌入的消息错误地报告了自己的长度。

当我使用小型calculateInfocnt.Result时,它又起作用了。

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

https://stackoverflow.com/questions/5722171

复制
相关文章

相似问题

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