使用SQLite3数据库存储数据导致系统资源占满

 时间:2024-10-11 18:36:46

1、分析:首先我认真思考了一下,程序奔溃后系统输出的错误信息out of memory:kill process(27731) sqlite score 621 or sacrifice child。重点在out of memory!!!即内存用完,内存泄露,程序为了保证安全,杀死了一个进程。

2、其次,再次打开Linux的TOP系统资源监控,观察VSZ的变化规律,发现VSZ的数据一直在增大,且呈指数型增大,非线性的。当VSZ数值到221M,程序就会崩掉。

3、发现VSZ的数据一直在增大,且呈指数型增大。分析得到:每次sqlite输入一条数据前,都会进行一次查询数据表操作,随着数据条数越来越多,每次查询就会浪费越多的系统资源,这就造成了系统资源占用越来越多。查找相关知识,Linux默认会给每个进程分配221M虚拟内存,因此当当VSZ数值到221M,程序就会崩掉。

4、当时,sqlite程序查询语句是:sql坡纠课柩ite3_get_table(db,"select * from 皈其拄攥TABLE1",&table,&nrow,&ncol,&errmsg);问题就出在了"select * from TABLE1",这条语句是:查询的是数据表TABLE1中所有的内容,随着程序运行时间,数据越来越多,那么需要查询的压力就会越大,从而导致,VSZ呈指数增长,最终导致程序崩溃。

5、解决方法:将sqlite3_get_ta水瑞侮瑜ble(db,"select * from TABL呶蓟鹭毵E1",&table,&nrow,&ncol,&errmsg);改为sqlite3_get_table(db,"select * from TABLE1 where ID=%d",row”,&table,&nrow,&ncol,&errmsg);即加上一条限制条件where ID=%d",row即可,这样每次查询就这是单单查询sqlite数据表的主键。

  • windows server 2003 服务器怎么新建发布网站
  • cmd命令行添加用户
  • FastStone Capture截图快捷键使用教程
  • windows上 用 IP安全策略-关闭端口 教程
  • Ora-00018超出最大会话数处理
  • 热门搜索
    我和我的祖国手抄报内容 疫情手抄报内容怎么写 爱护牙齿手抄报 国庆节英语手抄报 手抄报版面设计花边 中秋节手抄报模板 中秋手抄报图片大全图片 冬天的手抄报 有关绿色环保的手抄报 健康心理手抄报