• Object-c SQLite 数据库内存溢出问题


    最近正在开发一个应用,应用里面使用SQLite 数据库的地方比较多,一些下载的内容都进行了SQLite数据库缓存,应用开发完成之后发现一个严重的问题,程序莫名其妙的崩溃,使用XCode的内存分析工具分析后发现,Controller已经完全释放了,但是打开Controller的时候升高的内存只释放了三分之一,然后来回的打开Controller和关闭Controller以后发现每次都是一样,如此反复之后内存就溢出了。

    这个问题太奇怪了,我非常确认  Controller中调用的所有对象的 Delegate 都置为nil 了,所有创建对象都被置为nil 了,但是内存还是莫名其妙的无法释放,最后经过反复调试发现SQLite数据库在打开的时候非常消耗内存,只要是打开数据库不关闭,内存就会保持在一个稳定的值,也就是说,在程序启动的时候打开一次数据库就可以不用关闭了,这样的话内存反而能长期保持在一个非常低的值,而且还有一个好处就是执行SQL的时候非常快(这个倒是可以理解,每次执行SQL的时候不用打开和关闭数据库了嘛)。

    本人之前是做过很长一段时间的服务端开发,从我接触数据库开始,所有教材都是告诫我,使用完数据库之后一定要关闭,这样的话可以有效的释放连接 和内存,但是坑爹的IOS居然是变相的鼓励不关闭数据库,这个简直就是颠覆了我的世界观,让我说什么好呢?只能呵呵了,希望以后各位不会遇到相同的问题。

  • 相关阅读:
    【二分图最大独立集/最小割】P3355 骑士共存问题
    【费用流+正负费用处理】UVA11613 Acme Corporation
    【费用流】P2517 [HAOI2010]订货
    【最小割】P1361 小M的作物
    【最小割】[SHOI2007]善意的投票
    【最小割+割点转换】[USACO5.4]奶牛的电信Telecowmunication
    数据结构学习笔记——ST表
    图论学习笔记——LCA
    基于CNN的手写数字识别程序
    [Atcoder]M-Solutions 题解
  • 原文地址:https://www.cnblogs.com/lixing/p/4369360.html
Copyright © 2020-2023  润新知