方案->
|
Midas
|
DCOM
|
COM+
|
ASTA
|
RemoteObject
|
.NET
|
提供者
|
Borland
|
微软
|
微软
|
微软
| ||
核心技术
|
COM
|
COM
|
COM
|
ASTA自己的,类同Midas,
但不依赖于COM |
RemObjects自己的WebService技术,
不依赖于COM |
WebService
|
开发工具
|
Delphi7
|
Delphi7
|
Delphi7
|
Delphi7
|
Delphi7
|
Visual Studio/Delphi8,9
|
与现有开发模式兼容程度
|
★★★★★
|
★★★★
|
★★★★
|
★★
(很不同的开发模式) |
★★★★
(支持Delphi的Prvider/ClientDataSet) |
★
|
部署容易程度
|
★★★
|
★★
|
★
|
★★★★
(集成server、不需要类似socket server、midas.dll的东西) |
★★★★★
(集成server、不需要类似socket server、midas.dll的东西) |
★
|
可伸缩性
|
★★★★
|
★★★★
|
★★★★★★
|
★★★★
|
★★★★★
(支持自带服务器,或者使用Apache/IIS等容器) |
★★★★
|
性能(效率)
|
★★★
|
★★★★
|
★★★★
|
★★★★★
(二进制传输,支持压缩) |
★★★★
(二进制传输,支持压缩) |
★★
(文本的XML消息传输) |
消息传输格式
|
二进制COM消息
|
二进制COM消息
|
二进制COM消息
|
二进制流
|
二进制流或文本的XML SOAP消息
|
XML SOAP消息
|
源程序
|
不全
|
无
|
无
|
有
|
有
|
无
|
购买价格
|
$0
|
$0
|
$0
|
$299 - $7,500
|
EUR 299
|
$0
|
与.NET集成
|
不可以
|
可以
|
可以
|
不可以
|
可以
(直接基于webservice并提供.NET客户端开发包,并可以使用二进制消息格式) |
可以
|
中间件跨平台
|
有可能
|
不可能
|
不可能
|
有可能
|
可以
(支持Kylix开发,支持Apache做容器) |
可能吧
|
总体评价
|
★★★
|
★★
|
★
|
★★★★
|
★★★★★
|
★★
|
速度与效率测试:
测试项目 * |
计算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”目录。