由于protobuffers是java序列化的绝佳替代品,因此我们广泛使用它。此外,我们使用java构建器作为通用数据对象。在使用消息构建器,形成实例参数和形成对象的普通java基元检查构造对象的速度时,我们发现对于包含6个基本字段的对象,使用构建器构造对象(这是对象的参数)花了1.1毫秒,而使用java原语花了0.3毫秒!并列出了50个这样的领域!构建者是否很重,使用它们作为一般数据对象会在何种程度上影响构造速度?
以下是我用于分析的样本设计,
message PersonList
{
repeated Person = 1;
message Person
{
optional string name = 1;
optional int32 age = 2;
optional string place = 3;
optional bool alive = 4;
optional string profession = 5;
}
}
The java equivalent
Class PersonList {
List<Person> personList;
Class Person {
String name;
int age;
String place;
boolean alive;
String profession;
}
/* getters and setters*/
}
答案 0 :(得分:1)
我很难想象任何只包含“6个原始值”的东西可能需要7毫秒来构建。这可能是它应该花费的10万倍。所以我不确定我理解你在做什么。
尽管如此,由于多种原因,protobuf制造商确实比典型的POJO更复杂。例如,protobuf对象跟踪当前设置的字段。此外,重复的基元被加框,这使得它们与Java原始数组相比效率很低。因此,如果您单独测量施工时间,您可能会发现显着差异。但是,与应用程序代码的其余部分所花费的时间相比,这些效果通常无关紧要。