速度与效率测试:
测试项目 * 计算1000次1+1=2 * 传输10000条100字节记录 * 所花时间(ms) * 传输字节数 * 所花时间 传输字节数 Midas (Socket Connection) 26,047 366,000 2,359 1047,000 Midas (DCOM Connection) 812 933 2,047 1047,000 ADO直连数据库 (两层) 297 1046,000 Asta 3 压缩 1,578 1100,000 RemoteObject2 HTTP 二进制 压缩 8,641 791,000 2,515 1048,000 RemoteObject2 HTTP 二进制 不压缩 7,765 783,000 2,391 1049,000 RemoteObject2 HTTP SOAP 11,687 1935,000 3,110 1052,000 RemoteObject2 TCP 二进制 压缩 8,406 512,000 2,422 1049,000 RemoteObject2 TCP 二进制 不压缩 6,547 504,000 2,484 1563,000 RemoteObject2 TCP SOAP 11,281 1673,000 RemoteObject3 HTTP 二进制 压缩 11,625 504,000 RemoteObject3 HTTP 二进制 不压缩 10,593 501,000 RemoteObject3 HTTP SOAP 15,640 1108,000 RemoteObject3 TCP 二进制 压缩 11,172 512,000 RemoteObject3 TCP 二进制 不压缩 10,203 504,000 RemoteObject3 TCP SOAP 15,547 1712,000结果分析:
两层的效率当然是最高的;这样选择三层方案时就可以在伸缩性和性能之间做权衡,选择最优方案 DCOM针对本机运算可能做过优化,太快了,传输的字节数也太少了 Socket Connection的效率实在不敢恭维,比RemoteObject使用SOAP传输还低 RemoteObject使用二进制传输的效率大概是使用SOAP的2-3倍 RemoteObject使用二进制传输基本能达到甚至超过Socket Server的性能 RemoteObject的压缩好像没什么用 Asta性能比RemoteObject和Midas都高,但这个结果是设置了ADOQuery的CacheSize=1000时取得的,其它的测试都没有专门设置该属性
* 以上测试涉及文件都在附件中的测试包中;都是连接的本机(localhost);空白的是没有做测试的
* 传输字节数测量都是用的CommView 4.1 IP包检测捕获软件,监测“Loopback”(127.0.0.1)设备;CommView软件安装见测试包的tools目录;字节数包括实际传输的数据和IP握手信息等,如果大于10K,则只保留到千位,可能每次测量会有一点点区别。
* 测试所花时间时CommView停止捕获IP包,测试3次左右,取中间值
* 测试计算1000次1+1=2:
中间都是实现类似以下方法:
function Sum(a, b: Integer): Integer;
begin
Result := a + b;
end;
其中RemoteObject 2、3的测试程序直接用的它自带的MegaDemo例子,执行文件分别见测试包中的“1+1=2\RemObjects SDK 2”和“1+1=2\RemObjects SDK 3”目录,后者是试用版,运行前需要先允许Delphi(不知道还有没有其它限制),测试时都是设置的使用Indy;Midas和DCOM的测试是自己写的程序,源程序和执行文件测试包中的“midas”目录。
本文地址:http://com.8s8s.com/it/it4945.htm