WP8 SqlCE和SqlLite數據存儲性能比較


在平時的開發中一定會用到本地數據存儲,除了獨立存儲外我們還可以選擇SqlCE和SqlLite;於是在選擇上我們就必須權衡他們兩者的性能擇優選擇.

測試代碼:(這個例子是在msdn sqllite例子上面修改的,測試頁面在CustomerEditView.xaml.cs 大家可以點擊首頁add按鈕進入)

主要代碼:

 //測試插入數據性能
    private async void Button_Click_1(object sender, RoutedEventArgs e)
    {
        int num = int.Parse(txtNum.Text);
        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < num; i++)
        {
            CustomerViewModel cvm = new CustomerViewModel { Name = "張三" + i.ToString(), City = "城市" + i.ToString(), Contact = "1234" + i.ToString() };
            await CustomersViewModel.GetDefault().InsertItemAsync(cvm);
        }
        sw.Stop();
        tbTime.Text = sw.ElapsedMilliseconds.ToString();
        ShowMemory();
    }
      //測試查詢數據性能
    private async void Button_Click_2(object sender, RoutedEventArgs e)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        //await CustomersViewModel.GetDefault().GetItemAsync(950);//查詢一個數據
        await CustomersViewModel.GetDefault().GetAllItems();
        sw.Stop();
        tbTime.Text = sw.ElapsedMilliseconds.ToString();
        ShowMemory();
    }
      //sqlce插入數據
    private void Button_Click_3(object sender, RoutedEventArgs e)
    {
        int num = int.Parse(txtNum.Text);
        Stopwatch sw = new Stopwatch();
        sw.Start();
        for (int i = 0; i < num; i++)
        {
            Customer cvm = new Customer { Name = "張三" + i.ToString(), City = "城市" + i.ToString(), Contact = "1234" + i.ToString() };
            App.SqlCEDataBase.Customers.InsertOnSubmit(cvm);
        }
        App.SqlCEDataBase.SubmitChanges();
        sw.Stop();
        tbTime.Text = sw.ElapsedMilliseconds.ToString();
        ShowMemory();
    }
//sqlce查詢數據
    private void Button_Click_4(object sender, RoutedEventArgs e)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        //await CustomersViewModel.GetDefault().GetItemAsync(950);//查詢一個數據
        var cs = from c in App.SqlCEDataBase.Customers
                 select c;
        int s = cs.Count();
        sw.Stop();
        tbTime.Text = sw.ElapsedMilliseconds.ToString();
        ShowMemory();
    }
    private void ShowMemory()
    {
        string total = "DeviceTotalMemory";
        string current = "ApplicationCurrentMemoryUsage";
        string peak = "ApplicationPeakMemoryUsage";
        long totalBytes = (long)DeviceExtendedProperties.GetValue(total);
        long currentBytes = (long)DeviceExtendedProperties.GetValue(current);
        long peakBytes = (long)DeviceExtendedProperties.GetValue(peak);
        PageTitle.Text = "設備總內存:" + totalBytes.ToString() + "當前應用:" + currentBytes.ToString() + "當前應用最高:" + peakBytes.ToString();
    }

 

先來說說他們各自的優缺點,歡迎大家補充:

sqlce:支持linq to sql

sqllite:跨平台,操作和之前和sql差不多,感覺靈活性高。

接下來我們就從速度和內存兩方面比較下他們的性能:(測試機920)

通過測試發現在內存上面幾乎沒有什么差別,但是在速度上面sqlce性能遠大於sqllite。

上面只是測試了1000左右的數據,記得以前一個項目中有10000多數據需要一次性寫入,發現好像用來15分鍾左右,后面直接放棄了。

所以我感覺我們如果沒有什么特殊的要求還是用sqlce比較好。但是網上搜索到的例子都是建議使用sqllite,真不知道他們是出於什么理由。上面只是拋磚引玉希望大家多提供寶貴意見,多提供實際開發經驗。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM