Sqlite和SQLCE在Windows Mobile 6上的效能對比

來源:互聯網
上載者:User
     最近公司需要將案頭系統部署到PDA上面去,選擇了WM6作為部署平台。在選擇資料庫方面出現了一點顧慮,因為對於PDA而言,效能是首要考慮的因素。
     在開源的資料庫Sqlite和SQLCE之間徘徊,所以針對這個情況,對Sqlite和SQLCE在WM6上面做了效能測試。我也將自己在做測試過程中碰到的問題在這裡羅列一下,以便讓那些在網上查了很久都找不到答案的朋友少走一些彎路。
     從兩個方面來分析:第一,碰到的問題以及解決方案,第二,測試效能的結果和結論。
    第一:首先在部署的時候需要將資料庫拷貝到PDA上或者WM上面,拷貝的路徑是在程式中寫好的路徑。測試時,我的路徑是"Program Files"smartdevicetest下面。

     開始部署時,因為我先測試SQLCE的,出現 “無法找到 PInvoke DLL“sqlceme35.dll” ”的錯誤,原因是因為在VS自動部署的時候沒有將sqlceme35.dll部署到模擬器上面去,導致編譯通過,但是運行出錯。

    在網上找了些解決方案,很多不能用,以下解決方案能行:http://blog.csdn.net/flyjimi/archive/2008/12/11/3500606.aspx 原文地址是:http://blogs.msdn.com/sqlservercompact/archive/2007/10/26/can-t-find-p-invoke-dll-sqlcemenn-dll.aspx 但是在解決方案中,沒有寫明白具體的操作方法,具體是哪三個CAB檔案。然後我就到以下目錄下

在這個目錄下有很多個CAB,因為我用的是WM5的,所以關於WM5的我都拷貝到模擬器上去, 將選中的檔案拷貝到WM5上面,然後到WM上面執行一下,在執行這些檔案的時候會出現“已經安裝了之前的版本,需要重新安裝的點擊確定”。點擊確定就好了。我的安裝順序是:從下往上依次安裝。重新編譯,部署,運行,SQLCE通過。

輪到SQLite了,還是按照原來一樣將資料庫拷貝的目錄下面,這裡資料庫支援的類型暫時我知道是有“.DB”,“.DB3”.後來通過用UltraEdit開啟SQLite的資料庫發現裡面有SQLite3的關鍵字,所以只要有這個關鍵字,尾碼名不管用什麼都是支援的。沒有尾碼名也是可以的。

還是按原來的一樣。部署運行,出現了“無法找到 PInvoke DLL 'SQLite.Interop.064.DLL'”原因當然也是VS部署的時候不會將這個部署上去。鬱悶,沒有先例的東西就是問題多。沒辦法,只有嘗試。找到SQLite.net的安裝目錄下。我的是:D:"Program Files"SQLite.NET"bin"CompactFramework,在這個目錄下面找到一個“SQLite.Interop.064.DLL”的檔案,拷貝到模擬器上,發現還是不行,然後在同一目錄下面找到

 “SQLite.Interop.064.lib”這個檔案。想想這兩個麼應該是一樣的咯,然後也複製到模擬器上,這裡注意,拷貝的路徑是在跟應用程式同一目錄下。當然會出現要不要覆蓋的問題咯。點擊覆蓋。

編譯,部署,運行。通過。非常欣慰!
   後來裝了個6.0的SDK,然後就部署到6.0的上面去了!
   第二: 一切編譯通過,開始執行。
     
                                                        
這張圖是主介面,作為導航用的,主要的增刪改操作,已經對字串的支援,和日期類型的比較。
這裡的日期類型的比較用了一個簡單的SQL語句:select * from t4 where Birthday>'2007-09-05';這裡稍微解釋一下,我在資料庫中設定這個日期為nvarchar
類型,而SQLite支援的是弱類型的,所以當我在介面中選擇一個日期類型,然後存入資料庫是不會出現任何問題的。也就是說我可以將日期類型直接存到類型為nvarchar的類型的欄位中去。
                                                          
     這張圖是用對資料庫資料插入時,兩個資料庫的效能的比較。在這裡我用到了插入5000條資料,上面的用時的單位是MS。當然這裡只給出了一次的測試結果,經過多次的測試,測得SQLite插入5000條資料的用時在4500到5000左右,而SQLCE是在23000到25000左右。所以在效能能可以看出SQLite是SQLCE的4到5倍左右。當然這裡我用到了事務,因為我在傳統型程式上測試過,如果用事務比不用事務的效能要高出幾十倍。最搞笑的時候我在傳統型程式上測試插入10000條資料到SQLCE資料庫,沒有用到事務,我中午一覺睡醒還沒插入完畢。可見這效率。
                                                              
 這個圖是用來查詢出t2,t3表中的資料量的,為了之後的聯集查詢做準備的。這裡我在每個資料庫中的t2,t3表中都插入了25000條資料。
                                                             
這裡用到了聯集查詢,語句很簡單:select * from t2,t3 where t2.id=t3.id;非常簡單。這裡記錄了一次的查詢結果,經過多次測試,得出查詢的效率Sqlite比SQLCE的效率高出4到5倍。
   總結:
          無論在傳統型程式上,還是在PDA上,SQLite的效率都比SQLCE高的多。所以在輕量級資料庫的選擇上,我們最好也盡量選擇SQLite的資料庫,而且是開源的。在測試的過程中發現,不管是哪個資料庫,第一次的查詢效率相對會比較低一些。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.