Delphi多层开发方案比较
方案->
|
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”目录。
中间都是实现类似以下方法:
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”目录。