在使用 WCF 時,為了更好地進行調試,我都選擇了 HTTP 協議進行數據傳輸。最近項目對性能要求比較高,所以就換成了使用 TCP 協議。並對二者的性能進行了一個簡單的測試。以下是測試結果:
環境:
CPU: E5800 3.20GHz+3.19GHz
RAM: 7.97GB
64 bit OS, 64 bit processor
把服務端、客戶端都部署在本機進行數據傳輸測試。分如下場景進行測試:
1. 1000次請求,每次請求傳輸 1 個對象,每個對象 80 個屬性:
HTTP 平均耗時:6.2s左右。
TCP 平時耗時:3.9s左右。
結論:使用 TCP 連接,可以節省在建立連接時的性能消耗。對於進行大量連接時,相對 HTTP 有比較明顯的性能提升。
2. 100次請求,每次請求傳輸 500 個對象,每個對象 80 個屬性:
HTTP 平均耗時:19s左右。
TCP 平時耗時:18s左右。
結論:
當使用單個連接傳輸大數據量時,速度則主要取決於數據序列化及網絡傳輸速度,由於 Http 也是基於 TCP 進行傳輸的,所以作用較小。
反思:
由於第一次使用了外網,會有防火牆等不確定因素,造成數據失真。第二次在本地時,由於進行了數據庫訪問,同樣可能導致數據失真。所以以上結論基於全內存數據,本地環境進行數據傳輸測試。
之前由於需要也進行過各種性能測試。經常懶得進行最直接的測試,而是直接使用應用程序中的環境進行測試。由於許多不確定因素:服務器、網絡、數據庫等,造成了數據經常失真,又不得不排除各種原因,最后還是得使用最直接最純凈的方式來進行數據測試。得不償失啊!
以后要做性能測試,就一定要嚴謹,要在測試前想好純凈的測試用例,編寫正式、直接的測試代碼,這樣其實是最省時的方法。