1. 程式人生 > >Delphi多層開發方案比較

Delphi多層開發方案比較

以下轉載自:

http://blog.sina.com.cn/s/blog_53decb4101009a5m.html~type=v5_one&label=rela_nextarticle

http://blog.csdn.net/SmallHand/archive/2007/03/02/1519311.aspx

留作筆記。

方案->

Midas

DCOM

COM+

ASTA

RemoteObject

.NET

核心技術

COM

COM

COM

ASTA 自己的,類同Midas , 但不依賴於COM

RemObjects 自己的WebService 技術, 不依賴於COM

WebService

開發工具

Delphi7

Delphi7

Delphi7

Delphi7

Delphi7

Visual Studio/Delphi8,9

與現有開發模式相容程度

★★★★★

★★★★

★★★★

★★
(
很不同的開發模式)

★★★★
(
支援DelphiPrvider/ClientDataSet)

部署容易程度

★★★

★★

★★★★
(

整合server 、不需要類似socket servermidas.dll 的東西)

★★★★★
(
整合server 、不需要類似socket servermidas.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 做容器)

可能吧

總體評價

★★★

★★

★★★★

★★★★★

★★

速度與效率測試:

測試專案 *

計算10001+1=2 *

傳輸10000100 位元組記錄 *

所花時間(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 使用二進位制傳輸的效率大概是使用SOAP23
  • RemoteObject 使用二進位制傳輸基本能達到甚至超過Socket Server 的效能
  • RemoteObject 的壓縮好像沒什麼用
  • Asta 效能比RemoteObjectMidas 都高,但這個結果是設定了ADOQueryCacheSize=1000 時取得的,其它的測試都沒有專門設定該屬性


*
以上測試涉及檔案都在附件中的測試包中;都是連線的本機(localhost) ;空白的是沒有做測試的

* 傳輸位元組數測量都是用的CommView 4.1 IP 包檢測捕獲軟體,監測“Loopback”(127.0.0.1) 裝置;CommView 軟體安裝見測試包的tools 目錄;位元組數包括實際傳輸的資料和IP 握手資訊等,如果大於10K ,則只保留到千位,可能每次測量會有一點點區別。

* 測試所花時間時CommView 停止捕獲IP 包,測試3 次左右,取中間值

* 測試計算10001+1=2 : 中間都是實現類似以下方法:
function Sum(a, b: Integer): Integer;
begin
Result := a + b;
end;

其中RemoteObject 23 的測試程式直接用的它自帶的MegaDemo 例子,執行檔案分別見測試包中的“1+1=2/RemObjects SDK 2”“1+1=2/RemObjects SDK 3” 目錄,後者是試用版,執行前需要先允許Delphi (不知道還有沒有其它限制),測試時都是設定的使用IndyMidasDCOM 的測試是自己寫的程式,源程式和執行檔案測試包中的“midas” 目錄。