On Fri, Sep 25, 2009 at 6:41 AM, Daniel Augustin Pavel <
> I've worked a bit on improving the perfomance of equals() and
> hashCode() for the generated message clases.
Unfortunately, increasing the generated code size really is a big problem.
Protobuf generated code is *huge*, and we're always looking for ways to
reduce it. We made a conscious decision not to implement equals() and
hashCode() in generated code because, in our experience, these methods are
rarely actually desired outside of tests, so the benefit of reducing the
generated code size outweighs the cost of these methods being slow.
Can you tell us a bit about your use case? Again, in my experience, people
who are comparing message objects by content outside of tests are almost
always doing something they don't need to be (usually they actually want to
compare by identity instead). But, I'm willing to be proven wrong.
BTW, another way you could possibly speed up equals() and hashCode() is to
serialize the objects and compare raw bytes. This can be done pretty easily
in a wrapper class, without modifying the protobuf implementation. You
could also implement your hash-caching trick in a wrapper class, which alone
could probably make a huge difference for List.contains(). Or we could
perhaps implement the hash caching in the official implementation, since it
wouldn't require new generated code.
> The above does not apply to LITE messages from what I can tell, they
> just use the standard Object implementation of these methods (which I
> find quite inappropiate for the kind of data protobuf objects are
> supposed to represent).
The goal of "lite" messages is to shed features in order to reduce code
size. equals() and hashCode() were two of the casualties. Since lite
messages don't support reflection, our options were either to generate more
code (bad -- lite users are exactly the users who don't want more code) or
not implement them.
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To post to this group, send email to email@example.com
To unsubscribe from this group, send email to
For more options, visit this group at