在平時的開發中一定會用到本地數據存儲,除了獨立存儲外我們還可以選擇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,真不知道他們是出於什么理由。上面只是拋磚引玉希望大家多提供寶貴意見,多提供實際開發經驗。