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

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

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

Object-c SQLite 数据库内存溢出问题的更多相关文章

  1. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  2. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  3. 解决查询access数据库含日文出现“内存溢出”问题

    ACCESS有个BUG,那就是在使用 like 搜索时如果遇到日文就会出现“内存溢出”的问题,提示“80040e14/内存溢出”. 会出问题的SQL: where title like '%" ...

  4. .net sqlite 内存溢出 问题的分析与解决。

    一个小的工具网站,用了sqlite数据库,在并发小的情况一切正常,但是并发量上来之后,就报"out of memory"错误了. 分析了代码,就是很简单的根据一个条件取一段数据,并 ...

  5. C#写的window服务内存溢出

    浅谈c#垃圾回收机制(GC) 写了一个window服务,循环更新sqlite记录,内存一点点稳步增长.三天后,内存溢出.于是,我从自己的代码入手,查找到底哪儿占用内存释放不掉,最终明确是调用servi ...

  6. java内存溢出和内存泄露

    虽然jvm可以通过GC自动回收无用的内存,但是代码不好的话仍然存在内存溢出的风险. 最近在网上搜集了一些资料,现整理如下: —————————————————————————————————————— ...

  7. Android中SQLite数据库小计

    2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...

  8. C#操作SQLite数据库

    SQLite介绍 SQLite is a software library that implements a self-contained, serverless, zero-configurati ...

  9. 3.3 SQLite数据库

    1.使用嵌入式关系型SQLite数据库存储数据 轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用 ...

随机推荐

  1. opencv3.2.0形态学滤波之腐蚀

    /* 腐蚀(erode)含义: 腐蚀和膨胀是相反的一对操作,所以腐蚀就是求局部最小值的操作,腐蚀操作使原图中 国的高亮部分被腐蚀,效果图比原图有更小的高亮的区域. 腐蚀函数原型API及参数同膨胀相同 ...

  2. RPC簡介

    RPC 技术原理       RPC ( Remote Procedure Call Protocol,远程过程调用协议 ): 客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调 ...

  3. Python 导出导入安装包

    python导出安装包 pip freeze > requirements.txt python导入安装包 pip install -r requirements.txt

  4. h5调用微信分享

    https://blog.csdn.net/qq_39562787/article/details/79217386

  5. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  6. [VS2015] [asp.net] 允许远程访问本机正在DEBUG的服务

    一.打开并编辑解决方案目录(不是工程目录)下的文件: \.vs\config\applicationhost.config 增加黑体行: <site name="XXXX" ...

  7. 《SQL Server 2008从入门到精通》--20180703

    SELECT操作多表数据 关于连接的问题,在<SQL必知必会>学习笔记中已经讲到过,但是没有掌握完全,所以再学一下. JOIN连接 首先我们先来看一下最简单的连接.Products表和Ve ...

  8. Django的model中创建表

    类中的class Meta字段的作用: 第一个作用可以给这个类起名字 在后台的admin中显示这个类名字 class CourseCategory(models.Model): "" ...

  9. 铁乐学python_day04-作业

    1,写代码,有如下列表,按照要求实现每一个功能 li = ['alex', 'wusir', 'eric', 'rain', 'alex'] 计算列表的长度并输出 print(len(li)) 答:结 ...

  10. win7 64 &vs2010 与 opengl配置

    http://blog.csdn.net/lixam/article/details/7618015 http://blog.sina.com.cn/s/blog_7745fc8601017m36.h ...