iOS内存优化--大文件如何处理,内存映射
来源:互联网 发布:苹果瞄准镜软件 编辑:程序博客网 时间:2024/05/16 08:26
iOS开发经常使用到大文件,如大数据库,高清图片,视频资源,如果将这些数据缓存在内存中,会影响到内存性能。笔者从内存映射入手,给大家展示下大文件的处理,
1、在cache目录下,放一个视频文件,该视频文件450M大小。
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *filePath = [cachePath stringByAppendingPathComponent:@"Video_test.wmv"]; NSLog(@" filePath = %@", filePath); _data = [NSData dataWithContentsOfFile:filePath];
运行效果如下:系统的Memory同时高达450M,显然不是我们希望看到的。
2、NSData如果用磁盘映射的初始化方法,新增了一个option选项
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *filePath = [cachePath stringByAppendingPathComponent:@"Video_test.wmv"]; NSLog(@" filePath = %@", filePath); _data = [NSData dataWithContentsOfFile:filePath options:NSDataReadingMappedIfSafe error:nil];
运行效果如下:是不是极大提高内存性能
3、这个选项到底是做什么用呢?查阅官方文档:
NSDataReadingMappedIfSafe:提示指示文件应该映射到虚拟内存,如果可能和安全。
NSDataReadingUncached:提示显示文件不应该存储在文件系统缓存。数据读取一次,丢弃,这个选项可以提高性能。
NSDataReadingMappedAlways:在如果可能提示映射文件。
总之对于大文件的处理,使用NSDataReadingMappedIfSafe进行映射就能大幅度优化,文件内存映射是指把一个文件的内容映射到进程的内存虚拟地址空间中,这个实际上并没有为文件内容分配物理内存。实际上就相当于将内存地址值指向文件的磁盘地址。如果对这些内存进行读写,实际上就是对文件在磁盘上内容进行读写。
原创,转载请注明出处
1 0
- iOS内存优化--大文件如何处理,内存映射
- 使用内存映射文件处理大文件
- 内存映射文件----大文件处理----摘抄
- 内存映射文件处理大文件
- 内存映射文件处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 使用内存映射文件处理大文件
- 内存映射文件机制处理大文件
- 利用内存映射文件处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件机制处理大文件
- 内存映射文件处理大文件
- 大文件处理-内存文件映射
- Java中用内存映射处理大文件
- Java中用内存映射处理大文件 .
- Java中用内存映射处理大文件
- 分块内存映射处理大文件-例子
- Pyhon运算符的重载
- 第一课:利用atom和xcode开发react-native的入门技巧(Mac)
- 修改表编码格式(解决中文乱码问题相关)
- 如何在Ubuntu 14.04上备份、恢复及迁移MongoDB数据库
- iOS版本最新分布概况
- iOS内存优化--大文件如何处理,内存映射
- SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient
- eclipse 地址备忘
- Exynos4412裸机开发——中断处理
- 要提高SQL查询效率where语句条件的先后次序应如何写
- spring教程--JdbcTemplate详解
- CodeForces 605 C.Freelancer's Dreams(三分)
- [boolan]设计模式 观察者学习
- 将eclispe中项目导入到Android Studio中