在编译后当然就是使用sqlite,贸贸然去测试了一下创建数据库,插入数据,仅几条数据,发现,真不错的数据库,后来把数据量提高到10000的 时候,发现,怎么这么慢,后来自己都受不了,网上一查,原来是如果在没有使用事务的情况下每次执行都会自动代表一次事务进行数据库读写,而不是在内存中操 作,想想看这样必然很慢,后来自己把事务添加上去,真的很惊讶,提高数度肯定有好几千倍。兴奋。。。。

把代码帖一下:

#include <iostream>
#include <tchar.h>
#include <windows.h>
#include <MMSystem.h>
#pragma comment(lib,"winmm.lib")

#define  TEST_TIMES 10000
#define  ONE_M      1048576

#define  TEST_SELECT
#define  USE_TRANSACTION

#include "sqlite3.h"

typedef int(*sqlite3_callback)(void*,int,char**,char**);

char Name[4][32] = {"david","boluns","guanzhongdaoke","wangba"};

char Sex[2][8]  = {"boy","girl"};

int SleectCB(void* para,int n_column,char** column_value,char** column_name )
{
 printf("记录包含%d个字段\n", n_column );

for(int i = 0 ; i < n_column; i ++ )
 {
  printf("字段名:%s  字段值:%s\n", column_name[i], column_value[i] );
 }

printf("------------------\n");  
 return 0;

}

int sqlite_main()
{
 sqlite3 * db = 0;
 int result = 0;
 char * errmsg = 0;
 
#ifdef TEST_SELECT

remove("test.db");

result = sqlite3_open("test.db", &db );

if( result !=SQLITE_OK)
  return -1;

result = sqlite3_exec( db,"create table Info( ID integer primary key
, name nvarchar(32) ,sex integer,age integer)", NULL, NULL, &errmsg
);

if(result !=SQLITE_OK)
  printf("创建表失败,错误码:%d,错误原因:%s\n", result, errmsg );
  
#ifdef USE_TRANSACTION
 result = sqlite3_exec( db,"begin;", 0, 0, &errmsg ); 
#endif

char sSQL[128] = {0};
 
 for (int i=0;i<TEST_TIMES;i++)
 {
  memset(sSQL,0,128);
  sprintf(sSQL,"insert into Info values (%d,'%s','%s',%d)",i,Name[rand()%4],Sex[rand()%2],rand()%50+1);

result = sqlite3_exec( db,sSQL, 0, 0, &errmsg );

if(result !=SQLITE_OK)
   printf("插入记录失败,错误码:%d,错误原因:%s\n", result, errmsg );
 }
 
#ifdef USE_TRANSACTION
 result = sqlite3_exec( db,"commit;", 0, 0, &errmsg );
#endif

#else

result = sqlite3_open("test.db", &db );

if( result !=SQLITE_OK)
  return -1;

result = sqlite3_exec( db,"select * from Info", SleectCB, NULL, &errmsg );

#endif

sqlite3_close( db );

return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
 DWORD dwNow = timeGetTime();

sqlite_main();

printf("数据库初始化用时:%dms\r\n",timeGetTime()-dwNow);

return 0;

sqlite效率探测的更多相关文章

  1. 提升SQLite数据插入效率低、速度慢的方法

    前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...

  2. 提升SQLite数据插入效率低、速度慢的方法(转)

    前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代C语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...

  3. [转载]提升SQLite数据插入效率低、速度慢的方法

    转载地址:http://blog.csdn.net/chenguanzhou123/article/details/9376537#,如果有侵犯原创,请留言告知,本人会及时删除. 前言 SQLite数 ...

  4. SQLite事务 SQLite插入多条语句为什么这么慢?.net (C#)

    今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟!下面是他发给我的测试代码.我晕~~~~~~ using System.Data; ...

  5. IOS数据存储之CoreData使用优缺点

    前言: 学习了Sqlite数据之后认真思考了一下,对于已经习惯使用orm数据库的开发者或者对sql语句小白的开发者来说该如何做好数据库开发呢?这个上网搜了一下?看来总李多虑了!apple 提供了一种数 ...

  6. SqLiter

    1.去重 select *  from daydata where wtid||rectime in (select wtid||rectime from daydata group by wtid| ...

  7. CoreData介绍

    http://blog.csdn.net/zh952016281/article/details/52105683 写在前面 在CoreData中有一些常用的类,称呼可能各不相同.所以这里先约定一些关 ...

  8. 认识CoreData—初识CoreData

    http://www.cocoachina.com/ios/20160729/17245.html 这段时间公司一直比较忙,和组里小伙伴一起把公司项目按照之前逻辑重写了一下.由于项目比较大,还要兼顾之 ...

  9. 参数探测(Parameter Sniffing)影响存储过程执行效率解决方案

    如果SQL query中有参数,SQL Server 会创建一个参数嗅探进程以提高执行性能.该计划通常是最好的并被保存以重复利用.只是偶尔,不会选择最优的执行计划而影响执行效率. SQL Server ...

随机推荐

  1. C# 全选中数字文本框内容

    /// <summary>        /// 全选中数字文本框内容        /// </summary>        /// <param name=&quo ...

  2. 笔记-CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况

    //CGRectInset 将原来的矩形放大或者缩小,正表示缩小,-表示放大. CGRect rect= CGRectMake(20, 50, 100, 80); CGRect rect1=CGRec ...

  3. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  4. python的range()函数

    range函数的三种用法:>>> range(1,5) # 代表从1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) # 代表从1到5, ...

  5. linux socket编程:简易客户端与服务端

    什么是socket? socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来 ...

  6. 一个简单JDK动态代理的实例

    动态代理的步骤: 创建一个实现了InvocationHandler接口的类,必须重写接口里的invoke()方法. 创建被代理的类和接口 通过Proxy的静态方法 newProxyInsatance( ...

  7. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  8. Gson的学习与使用

    Gson介绍: GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串. 特点: a ...

  9. 微信小程序实现简易留言板

    微信小程序现在很火,于是也就玩玩,做了一个简易的留言板,让大家看看,你们会说no picture you say a j8 a,好吧先上图. 样子就是的,功能一目了然,下面我们就贴实现的代码,首先是H ...

  10. Oracle 序列 CACHE 值必须小于 CYCLE 值的解决方法

    之前创建sequence时碰到一个问题, 当我使用了cache时总是提示CACHE 值必须小于 CYCLE 值,查了下文档,找到这么一个公式 文档的大概意思是cache的值必须要小于通过这个公式计算得 ...