方案->
| Midas
| DCOM
| COM+
| ASTA
| RemoteObject
| .NET
| 提供者
| Borland
| 微软
| 微软
| http://www.astatech.com
| http://www.remobjects.com
| 微软
| 核心技术
| 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时取得的,其它的测试都没有专门设置该属性
<!--[if !vml]--><!--[endif]-->* 以上测试涉及文件都在附件中的测试包中;都是连接的本机(localhost);空白的是没有做测试的
<!--[if !vml]--><!--[endif]-->* 传输字节数测量都是用的CommView 4.1 IP包检测捕获软件,监测“Loopback”(127.0.0.1)设备;CommView软件安装见测试包的tools目录;字节数包括实际传输的数 据和IP握手信息等,如果大于10K,则只保留到千位,可能每次测量会有一点点区别。
<!--[if !vml]--><!--[endif]-->* 测试所花时间时CommView停止捕获IP包,测试3次左右,取中间值
<!--[if !vml]--><!--[endif]-->* 测试计算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;
<!--[if !vml]-->Midas和DCOM的测试是自己写的程序,源程序和执行文件测试包中的“midas”目录。
|