美文网首页
文件编程指导

文件编程指导

作者: saber_zz | 来源:发表于2021-04-10 09:44 被阅读0次

文件访问是一个很重要的性能瓶颈。

本文主要从以下几方面来提高文件访问的性能:

  • 文件编程建议
  • OX文件系统介绍
  • 文件性能测试
  • 文件内存映射mapping
  • 文件目录迭代访问
  • 解析域名
  • 追踪文件变化

通用I/O建议

  • 减少文件操作
  • 减少文件访问次数,如每次读取长度【chunks】
  • 执行顺序读写,替换seek。
  • 避免零填充延迟【指的是文件在关闭的时候,会自动填充空数据,导致文件关闭延迟,空文件seek】
  • 读比写便宜
  • 尽量延迟访问文件,使用懒加载的意思
  • 尽量不要缓存文件数据到内存,找到内存和文件缓存的平衡,特别哪些只使用一次的数据。

文件性能测试

  • shark
  • fs_usage
  • sc_usage

文件内存映射

总体目标是减少磁盘与内存之间的数据传输,文件内存映射和应用共用内存空间。

文件映射在一下情况非常有效

  • 多次访问一个大文件
  • 小文件一次性全部读取,频繁访问
  • 访问缓存文件的部分内存,必现读取文件的其他内容进内存。

不应该使用场景

  • 你想要按顺序从头到尾读取一个文件,仅仅访问一次
  • 非常大的文件【文件内存映射需要非常大的连续虚拟内存地址】
  • 可移动磁盘的文件
  • 网络文件

使用介绍

迭代目录

避免多次迭代目录,避免重复调用stat函数,迭代读取目录,系统会缓存大量的文件元数据。

追踪文件变化

iOS可以使用dispatch_source

1.添加属性

@property (nonatomic, strong) dispatch_source_t source;

2.开启监听

  • (void)startManager { [self startMonitorFile]; }

  • (void)startMonitorFile { //监听Document文件夹的变化 NSURL *directoryURL = [NSURL URLWithString:[SandBoxHelper docPath]]; //添加需要监听的目录 int const fd = open([[directoryURL path] fileSystemRepresentation], O_EVTONLY); if (fd < 0) { NSLog(@"Unable to open the path = %@", [directoryURL path]); return; } dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE, fd, DISPATCH_VNODE_WRITE, DISPATCH_TARGET_QUEUE_DEFAULT); dispatch_source_set_event_handler(source, ^() { unsigned long const type = dispatch_source_get_data(source); switch (type) { case DISPATCH_VNODE_WRITE: { PVRLog(@"Document目录内容发生变化!!!"); if (self.isConvenientFinished) { self.isConvenientFinished = NO; [self directoryDidChange]; } break; } default: break; } }); dispatch_source_set_cancel_handler(source, ^{ close(fd); }); self.source = source; dispatch_resume(self.source); }

3.在退出的时候,注销一下

  • (void)stopManager { dispatch_cancel(self.source); }

相关文章

  • 文件编程指导

    文件访问是一个很重要的性能瓶颈。 本文主要从以下几方面来提高文件访问的性能: 文件编程建议 OX文件系统介绍 文件...

  • ViewController编程指导

    1、预览 1.1、ViewController的职责 ViewController是应用本质架构的基础,每个app...

  • iOS 线程编程指南

    参考链接 官方文档之线程编程指导 官方文档之并发编程指南 官方文档之Block块编程指南

  • SpringAOP

    AOP简介和作用 AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导...

  • 文件编程

    对目录的操作 mkdir函数创建一个目录 删除一个目录 修改目录名 查询操作 打开一个目录 读取目录中的内容 关闭...

  • Python学习_IO文件操作

    在编程工作中,时常需要对各种文件进行操作。读写文件是最常见的IO编程,Python中内置了读写文件的函数。读写文件...

  • Apple Pay编程指导

    1.About Apple Pay Apple Pay是一种移动支付技术,让使用者把它们对真实的物品和服务的支付信...

  • 文件编程、文件下载

    目录操作 文件操作创建目录结构 1)mkDir(路径名字):创建成功返回true,失败返回false 删除目录 1...

  • SpringAOP

    AOP全程Aspect Oriented Programming面向切面编程,是一种编程范式,用于指导开发者如何组...

  • 少儿编程,让您的孩子脱颖而出

    家长您好! 我是编玩边学少儿编程指导老师。下面是我整理的少儿编程相关资料,蓝色字体可点击查看详情。 编程,...

网友评论

      本文标题:文件编程指导

      本文链接:https://www.haomeiwen.com/subject/ptcwkltx.html