The text is excerpted from
Choosing middleware: why performance and scalability do (and do not) matter
By Michi Henning, Chief Scientist, zeroc, Inc.
ArticleThe author is also the author of <advanced CORBA (r) programming with C ++)>
Test Environment
Dual-core 2.2 GHz athlon with 2 GB of memory running Windows XP Professional SP3.
Dual-core 2.0 GHz Mac Mini with 2 GB of memory running Windows Vista Ultimate SP1.
Compiler
C ++ Visual Studio 2008
C # Visual Studio 2008,. Net version 3.5
Java 1.6.0 JDK
Optimized Compilation speed, 64-bit for VistaCode. Ice 3.30
Latency
Latency is an important factor in evaluating middleware. It is defined as the time when the client calls the server and then receives the result. The minimum latency is defined as the call return time of function o (no input parameter, no return value.
Source code
Ice
Interface latency {
Void O (); // shortest possible operation name
};
WCF
[System. servicemodel. servicecontract]
Interface latency {
[System. servicemodel. operationcontract] void O ();
}
RMI
Import java. RMI. Remote;
Import java. RMI. RemoteException;
Public interface latency extends remote {
Void O () throws RemoteException;
}
Test Results
Requests/second |
Ice for. net |
Ice for Java |
Ice for C ++ |
WCF binary |
WCF soap |
RMI |
Loopback |
6,900 |
8,000 |
10,500 |
~ 6,900 |
~ 2,300 |
10,600 |
Gigabit network |
2,300 |
2,300 |
2,300 |
~ 2,190 |
~ 560 |
2,220 |
Throughput
Another important factor in evaluating middleware is throughput, which refers to the amount of data that the middleware can transmit per second.
Source code
Ice
Sequence <byte> byteseq;
Interface throughput {
Void sendbyteseq (byteseq B );
Byteseq recvbyteseq ();
};
WCF
[Servicecontract]
Interface Test {
[Operationcontract]
Void sendbyteseq (byte [] SEQ );
[Operationcontract]
Byte [] recvbyteseq ();
}
RMI
Import java. RMI. Remote;
Import java. RMI. RemoteException;
Public interface throughput extends remote {
Int byteseqsize = 500000;
Void sendbyteseq (byte [] SEQ) throws RemoteException;
Byte [] recvbyteseq () throws RemoteException;
}
Test Results
Throughput loopback |
Ice for. net |
Ice for Java |
Ice for C ++ |
WCF binary |
WCF soap |
RMI |
Byte seq (send) |
630 Mbit/s |
800 Mbit/s |
1,200 Mbit/s |
515 Mbit/s |
144 Mbit/s |
825 Mbit/s |
Byte seq (Recv) |
610 Mbit/s |
720 Mbit/s |
960 Mbit/s |
550 Mbit/s |
165 Mbit/s |
800 Mbit/s |
Throughput gigabit network |
Ice for. net |
Ice for Java |
Ice for C ++ |
WCF binary |
WCF soap |
RMI |
Byte seq (send) |
520 Mbit/s |
660 Mbit/s |
740 Mbit/s |
425 Mbit/s |
140 Mbit/s |
283 Mbit/s |
Byte seq (Recv) |
410 Mbit/s |
590 Mbit/s |
655 Mbit/s |
370 Mbit/s |
130 Mbit/s |
280 Mbit/s |