随笔 - 23  文章 - 0  评论 - 107  阅读 - 46261

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

 

posted on   多了特  阅读(1820)  评论(12编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示