- 论坛徽章:
- 0
|
我在arm板上 执行插入操作,如果用transaction平均每秒只能执行500次。。而且,速度与不用transaction差别并不明显。执行update时候,速度就更慢了。。
同样的程序在计算机上运行, 每秒可以插入30000次。请问,这个正常吗?
以下是我的程序,请问是程序的问题吗?- #include <stdio.h>
- #include "sqlite3.h"
- #include <stdlib.h>
- #include <time.h>
- static int callback(void *NotUsed, int argc, char **argv, char **azColName)
- {
- int i;
- for(i=0; i<argc; i++)
- {
- printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
- }
- printf("\n");
- return 0;
- }
- int printtime()
- {
- time_t ts;
- struct tm struTmNow;
- time(&ts);
- localtime_r(&ts, &struTmNow);
- printf("%d:%d:%d ",struTmNow.tm_hour, struTmNow.tm_min,struTmNow.tm_sec);
- }
- int main(int argc, char **argv)
- {
- sqlite3 *db;
- char *zErrMsg = 0;
- int rc;
- int i ;
- char query[500];
- int loopnum = atoi(argv[2]);
- rc = sqlite3_open(argv[1], &db);
- if( rc!= SQLITE_OK )
- {
- fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
- sqlite3_close(db);
- exit(1);
- }
- sprintf(query, "create table wutbl (test1 int, test2 int, test3 int ,test4 int, test5 int, test int, test7 int, test8 int, test9, test10 int)");
- rc = sqlite3_exec(db, query, callback, 0, &zErrMsg);
- if( rc!=SQLITE_OK )
- {
- fprintf(stderr, "SQL error: %s\n", zErrMsg);
- sqlite3_free(zErrMsg);
- }
- printf("time before insert:");
- printtime();
- printf("\n");
- rc = sqlite3_exec(db, "BEGIN; ", 0, 0, &zErrMsg);
- for (i = 0; i < loopnum; i++)
- {
- sprintf(query, "insert into wutbl values (%d,%d, %d, %d, %d, %d, %d, %d, %d, %d);", i,
- i,i,i,i,i,i,i,i,i);
- rc = sqlite3_exec(db, query, 0, 0, &zErrMsg);
- if (rc != SQLITE_OK)
- break;
- }
- if(i!= loopnum)
- {
- sqlite3_exec(db,"ROLLBACK:",0,0,&zErrMsg);
- printf("i = %d rollback\n",i);
- sqlite3_close(db);
- exit;
- }
- else
- {
- rc = sqlite3_exec(db, "COMMIT; ", 0, 0, &zErrMsg);
- printf(" time after %d insert:",i ) ;
- printtime();
- printf("\n");
- }
- printf("time before update:");
- printtime();
- printf("\n");
- rc = sqlite3_exec(db, "BEGIN; ", 0, 0, &zErrMsg);
- for (i = 0; i < loopnum; i++)
- {
- sprintf(query, "update wutbl set test2= %d where test1 = %d;", i+2,i);
- rc = sqlite3_exec(db, query, 0, 0, &zErrMsg);
- if (rc != SQLITE_OK)
- break;
- }
- if(i!= loopnum)
- {
- sqlite3_exec(db,"ROLLBACK:",0,0,&zErrMsg);
- printf("i = %d rollback\n",i);
- exit;
- }
- else
- {
- rc = sqlite3_exec(db, "COMMIT; ", 0, 0, &zErrMsg);
- printf(" time after %d update:",i ) ;
- printtime();
- printf("\n");
- }
- sqlite3_close(db);
- return 0;
- }
复制代码 |
|