From ZeroMQ / Learn the basics :
In 2011, CERN (European Organization for Nuclear Research) compared CORBA, Ice, Thrift, ZeroMQ, YAMI4, RTI, and Qpid (AMQP). Read their analysis and conclusions . (Pdf)
Which may just be the comparison you were. (Found thanks to a comment by Mattiu Ruge.)
I would also say that although some ORBs allow you to skip marshalling, you still cannot avoid the allocation of dynamic memory, which is important for performance. (Today, processors are insanely fast, memory access is slow, and asking the OS to allocate a memory page is very slow.)
So, in C ++, you can simply return the const string & binding, CORBA C ++ will force you to dynamically allocate and free the string or data structure (regardless of the type of the return type or out). It doesn’t matter if the method calls the process / network anyway, but in the process it becomes quite significant compared to simple C ++.
Another “booty” that we burned is that you cannot define mutually exclusive structures (i.e. structure “A” includes “B”, which includes “A” again). This meant that we had to convert them to interfaces that allocate the CORBA Servant "server side" (in-process) for each structure that is very heavily loaded. I understand that there are preliminary tricks to avoid creating servants, but in the end we just want to completely get away from CORBA, and not go deep into the depths.
Especially in C ++, memory management is very fragile and difficult to program correctly. (See The Rise and Fall or CORBA , “complexity” section.) I attribute many man-years of extra effort to this technology choice.
I would be interested to know how you are doing and what you have accepted.