SQLCE 4 VS SQLite 3.7 效能大車拼
- 2012-02-07
- 17410
- 0
前言:這幾天和朋友又再次討論到 SQLCE 和 SQLite 效能的問題,有常在看 demo 的文章可以知道我是一直很推崇 SQLCE 的,但我朋友卻是一直在使用 SQLite ,我「認為」SQLCE即使效能較差,他和MSSQL的相容能力還是有絕對優勢的,而我朋友「認為」SQLite 當初出現就是標榜快速,所以效能上一定會贏,雙方爭到最後只剩下效能有不同的意見,但是兩者都是用感覺在說話,為了讓說話可以大聲點,所以有了這篇測試文。
- 測試環境
- CPU:AMD Phenom II x4 955 AM3+ 45製成
- RAM:DDR2 800 2G×4
- OS:Windows 7 64bit
- 為了測試的過程可以順一點,測試檔案都是放置於 Ram disk,所以磁碟的效能已經不是重點了
- 測試資料為北風資料庫
- 測試工具為 LINQPad
為求最接近的公平所以測試都是使用 Order 這張表來做測試,先看看他們是否長得一樣
SQLCE
SQLite
雖然依據上面的圖就可以看出基本的搜尋效能,但這樣太草率所以 demo 還作了幾種不同的測試,詳細請繼續看下去。
首先使用 ORM 的技術針對 Order 來做連續一千次的 toList() 借此判斷搜尋要多久
SQLite 查詢兩次的結果都落在 29秒再來看看 SQLCE 的表現
SQLCE 搜尋兩次的時間都落在 6 秒....這這這有點OO比XX的感覺,但是這時候又有人說了,你今天在ToList 的時候不能確保 Provider 的優化能力,可能用每套都有天地差別的效果,於是我們來直接使用 SQL 語法操作
暖個身搜尋 Order 資料表並且顯示
但是測試一次是不準的,在查詢的當下還要考量機器的忙碌度,因此 demo 手動各執行了十次(手動間隔秒數不同)以下是搜尋秒數的記錄。
- SQLite
- 00:00:043
- 00:00:043
- 00:00:036
- 00:00:028
- 00:00:044
- 00:00:037
- 00:00:028
- 00:00:035
- 00:00:025
- 00:00:036
- SQLCE
- 00:00:013
- 00:00:018
- 00:00:013
- 00:00:017
- 00:00:028
- 00:00:021
- 00:00:022
- 00:00:023
- 00:00:034
- 00:00:036
再來是 SQLCE 和 SQLite 輪流寫入,各兩次並且是 SQLite → SQLCE → SQLite → SQLCE 的順序
SQLite 連續寫入一千次耗時15秒 (第一次測試)
SQCE 連續寫入一千次耗時10秒(第一次測試)
SQLite 連續寫入一千次耗時15秒(第二次測試)
SQCE 連續寫入一千次耗時8秒(第一次測試)
測試就到這裡結束,對於刪除和更新我並沒有去測,因為以上的結果已經大致可以判斷了,不過 demo 不會在這裡下結論,畢竟還是有存在些變數可能會有人質疑我用的工具用的 Provider 對於 MSSQL 家族較親和,所以在文章的最後放上這次測試的完整檔案供有興趣的朋友也可以自己用自己的環境執行測試。
【點我下載】
內容包含8個檔案
- NorthwindSQLCE.sdf
- NorthwindSQLite.sl3
- SQCEInsert.linq
- SQLCE.linq
- SQLCEADO.linq
- SQLite.linq
- SQLiteADO.linq
- SQLiteInsert.linq
回應討論