zoukankan      html  css  js  c++  java
  • 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,真不知道他们是出于什么理由。上面只是抛砖引玉希望大家多提供宝贵意见,多提供实际开发经验。

  • 相关阅读:
    java, listmap2json, fastjson
    java, mybatis, 调用mysql存储过程
    解析json串,利用正则表达式,split
    alibaba fastjson List<Map<String, String>>2Str
    getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:
    message from server: "Host 'XXX' is not allowed to connect to this MySQL server
    Java之工厂方法
    oracle 的分析函数
    在js中怎样获得checkbox里选中的多个值?(jQuery)
    获得select被选中option的value和text
  • 原文地址:https://www.cnblogs.com/duolete/p/3441859.html
Copyright © 2011-2022 走看看