Delphi多层开发方案比较

**方案- > **

|

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时取得的,其它的测试都没有专门设置该属性

  • 以上测试涉及文件都在附件中的测试包中;都是连接的本机(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”目录。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus