在平时的开发中一定会用到本地数据存储,除了独立存储外我们还可以选择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 = ; i < num; i++)
{
CustomerViewModel cvm = new CustomerViewModel { Name = "张三" + i.ToString(), City = "城市" + i.ToString(), Contact = "" + 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 = ; i < num; i++)
{
Customer cvm = new Customer { Name = "张三" + i.ToString(), City = "城市" + i.ToString(), Contact = "" + 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,真不知道他们是出于什么理由。上面只是抛砖引玉希望大家多提供宝贵意见,多提供实际开发经验。

WP8 SqlCE和SqlLite数据存储性能比较的更多相关文章

  1. 性能优化之数据存储&DOM编程

    多读书多看报 数据存储 ·在javascript中,数据存储的位置会对代码整体性能产生重大的影响. ·数据存储共有4种方式:字面量.变量.数组.对象成员.   ·要理解变量的访问速度,就要理解作用域. ...

  2. TI C6000 数据存储处理与性能优化

    存储器之于CPU好比仓库之于车间.车间加工过程中的原材料.半成品.成品等均需入出仓库,生产效率再快,如果仓库周转不善,也必然造成生产阻塞.如同仓库需要合理地规划管理一般,数据存储也需要恰当的处理技巧来 ...

  3. 探索etcd,Zookeeper和Consul一致键值数据存储的性能

    这篇博文是探索三个分布式.一致性键值数据存储软件性能的系列文章中的第一篇:etcd.Zookeeper和Consul,由etcd团队所写,可以让我们全面地了解如何评估三个分布式一致存储软件的性能.翻译 ...

  4. wp8.1 Study10:APP数据存储

    一.理论 1.App的各种数据在WP哪里的? 下图很好介绍了这个问题.有InstalltionFolder, knownFolder, SD Card... 2.一个App的数据存储概览 主要分两大部 ...

  5. IOS数据存储之Sqlite数据库

    前言: 之前学习了数据存储的NSUserDefaults,归档和解档,沙盒文件存储,但是对于数据量比较大,需要频繁查询,删除,更新等操作的时候无论从效率上还是性能上,上述三种明显不能满足我们的日常开发 ...

  6. Android实现数据存储技术

    转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...

  7. Android的数据存储方式(转)

    数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 ...

  8. Android数据存储的五种方法汇总

    本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPreferences存储数据 2 ...

  9. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

随机推荐

  1. [原创]Java性能优化权威指南读书思维导图

    [原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John 译者: 柳飞 ...

  2. 不会用ant打包、部署项目的工程师,不是一个好程序员(测试)

    副标题:利用ant脚本 自动构建svn增量/全量 系统程序升级包 首先请允许我这样说,作为开发或测试,你一定要具备这种本领.你可以手动打包.部署你的工程,但这不是最好的方法.最好的方式就是全自动化的方 ...

  3. android 页面跳转,数据回传

    package com.example.firstpg.firstpg; import android.support.v7.app.ActionBarActivity; import android ...

  4. SFTP+OpenSSH+ChrootDirectory设置

    账户设置 SFTP的账户直接使用Linux操作系统账户,我们可以用useradd命令来创建账户. 首先建立3个要管理的目录:   1 2 3 mkdir /home/sftp/homepage mkd ...

  5. C#数据库绑定

    .Net对数据库的绑定 using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...

  6. 山寨版Quartz.Net任务统一调度框架

    TaskScheduler 在日常工作中,大家都会经常遇到Win服务,在我工作的这些年中一直在使用Quartz.Net这个任务统一调度框架,也非常好用,配置简单,但是如果多个项目组的多个服务部署到一台 ...

  7. 理解 python metaclass使用技巧与应用场景分析

    理解python metaclass使用技巧与应用场景分析       参考: decorator与metaclass:http://jfine-python-classes.readthedocs. ...

  8. josephus Problem 中级(使用数组模拟链表,提升效率)

    问题描写叙述: 在<josephus Problem 0基础(使用数组)>中.我们提出了一种最简单直接的解决方式. 可是,细致审视代码之后.发现此种方案的效率并不高,详细体如今.当有人出局 ...

  9. GitHub上排名前100的Android开源库介绍(来自github)

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍,至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果,然后过滤了 ...

  10. java ConcurrentModificationException探究

    当集合结构被修改,会抛出Concurrent Modification Exception. fail-fast会在以下两种情况下抛出ConcurrentModificationException ( ...