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 |
與現有開發模式相容程度 |
★★★★★ |
★★★★ |
★★★★ |
★★ |
★★★★ |
★ |
部署容易程度 |
★★★ |
★★ |
★ |
★★★★ |
★★★★★ |
★ |
可伸縮性 |
★★★★ |
★★★★ |
★★★★★★ |
★★★★ |
★★★★★ |
★★★★ |
效能( 效率) |
★★★ |
★★★★ |
★★★★ |
★★★★★ |
★★★★ |
★★ |
訊息傳輸格式 |
二進位制COM 訊息 |
二進位制COM 訊息 |
二進位制COM 訊息 |
二進位制流 |
二進位制流或文字的XML SOAP 訊息 |
XML SOAP 訊息 |
源程式 |
不全 |
無 |
無 |
有 |
有 |
無 |
購買價格 |
$0 |
$0 |
$0 |
$299 - $7,500 |
EUR 299 |
$0 |
與.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”
目錄。