iOS将大文件映射到内存(读取大文件)
http://blog.csdn.net/xyt243135803/article/details/40995759
在《中国区GPS偏移纠正(适用于Google地图)》一文中曾读取一个78M的大数据文件,一开始采用了NSData的dataWithContentsOfFile:方法。不少人反馈说如果直接使用,将会耗尽iOS的内存。其实这个是可以改善的。 NSData还有一个API:
+ (id)dataWithContentsOfFile:(NSString *)path options:(NSDataReadingOptions)readOptionsMask error:(NSError **)errorPtr;
其中NSDataReadingOptions可以附加一个参数NSDataReadingMappedIfSafe参数。使用这个参数后,ios就不会把整个文件全部读取的内存了,而是将文件映射到进程的地址空间中,这么做并不会占用实际内存。这样就可以解决内存满的问题。
实际测试效果
不带参数时内存占用:
使用NSDataReadingMappedIfSafe参数后内存占用:
由此可见,对于体积很大文件,使用内存映射方式读取将会减少大量内存占用。 什么是文件内存映射呢
文件内存映射是指把一个文件的内容映射到进程的内存虚拟地址空间中,这个实际上并没有为文件内容分配物理内存。实际上就相当于将内存地址值指向文件的磁盘地址。如果对这些内存进行读写,实际上就是对文件在磁盘上内容进行读写。
iOS将大文件映射到内存(读取大文件)的更多相关文章
- Android mmap 文件映射到内存介绍
本文链接: Android mmap 文件映射到内存介绍 Android开发中,我们可能需要记录一些文件.例如记录log文件.如果使用流来写文件,频繁操作文件io可能会引起性能问题. 为了降低写文件的 ...
- selenium3 文件系列之------ opencsv读取csv文件
最近在学习selenium有关文件的读取测试,今天先总结一下如何读取csv文件.CSV的定义是与逗号分隔的值(Comma-Separated Values),在Java中需要用到第三方lib去处理读取 ...
- Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)
Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...
- Qt-QML-C++交互实现文件IO系统-后继-读取XML文件和创建XML文件
在前面两篇中,大致完成了一个文件IO的读和写操作.前面两篇文章链接 http://blog.csdn.net/z609932088/article/details/71488250 http://bl ...
- 91.生成ini文件并写入和读取ini文件
写入 WritePrivateProfileStringA("hello money", infx[i].name, money, "1.ini"); 按照字符 ...
- oracle varchar2改成大字段类型clob,读取大字段内容
http://blog.csdn.net/cai7095576/article/details/23999549
- 使用Java内存映射(Memory-Mapped Files)处理大文件
>>NIO中的内存映射 (1)什么是内存映射文件内存映射文件,是由一个文件到一块内存的映射,可以理解为将一个文件映射到进程地址,然后可以通过操作内存来访问文件数据.说白了就是使用虚拟内存将 ...
- Java内存映射,上G大文件轻松处理
内存映射文件(Memory-mapped File),指的是将一段虚拟内存逐字节映射于一个文件,使得应用程序处理文件如同访问主内存(但在真正使用到这些数据前却不会消耗物理内存,也不会有读写磁盘的操作) ...
- Java多线程读取大文件
前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...
随机推荐
- Python-OpenCV中图像颜色空间转换
目录 cv2.cvtColor() 1. RGB to GRAY 2. RGB to CIE XYZ 3. RGB to YCrCb JPEG 4. RGB to HSV 5. RGB to HLS ...
- 《OD Docker实战》Docker从入门到精通
一. 安装Docker http://wiki.jikexueyuan.com/project/docker-technology-and-combat/ https://mos.meituan.co ...
- 《OD学storm》20160828
一.Storm项目 1. 架构 javasdk -> nginx -> 日志文件 -> flume agent(collector) -> hdfs -> kafka - ...
- AngularJs详细
正经的来啦 (MVC) View(视图), 即 HTML. Model(模型), 当前视图中可用的数据. Controller(控制器), 即 JavaScript 函数,可以添加或修改属性. 修改了 ...
- DNS解析工具--nslookup和dig使用
1.nslookup使用 [root@master ~]# nslookup> server 8.8.8.8 #指定域名服务器Default server: 8.8.8.8Address: ...
- thinkphp5 join使用注意
A表有id,name,time等字段, B表有id,type,uid,email,address等字段. A表中的id和B表中的uid对应. Db::table(A表)->alias('a') ...
- 牛客练习赛34-C-little w and Segment Coverage(差分数组)
链接:https://ac.nowcoder.com/acm/contest/297/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 08-图8 How Long Does It Take (25 分
Given the relations of all the activities of a project, you are supposed to find the earliest comple ...
- 如何在mssql中获取最新自增ID的值
@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...
- Python metaclasses
metaclasses元类:就像对象是类的实例一样,类是它的元类的实例.调用元类可以创建类. metaclass使用type来创建类,type可以被继承生成新的元类. 这个和C#的反射很相似. 下面是 ...