objective-c - OS X 文件系统 API 比重复调用 [NSFileManager attributeOfItemAtPath...] 更快?

标签 objective-c c performance cocoa nsfilemanager

如果我只需要知道文件是否是文件夹/符号链接(symbolic link)及其大小,是否可以使用更快的文件系统 API。我目前正在使用 [NSFileManager attributeOfItemAtPath...] 并且仅使用 NSFileSize 和 NSFileType。

是否有我应该使用的批量文件系统枚举 API?我怀疑这可能会更快,而无需跳入和跳出用户代码。

我的目标是快速递归目录以获取文件夹的真实文件大小,当前调用 attributeOfItemAtPath 是我的 95% 瓶颈。

我当前使用的一些代码:

NSDictionary* properties = [fileManager attributesOfItemAtPath:filePath error:&error];
long long fileSize = [[properties objectForKey:NSFileSize] longLongValue];
NSObject* fileType = [[properties objectForKey:NSFileType isEqual:NSFileTypeDirectory];

最佳答案

如果你想真正变得毛茸茸的,Mac OS 内核实现了一个独特的 getdirentriesattr()系统调用将返回指定目录中的文件和属性列表。设置和调用很麻烦,并且并非所有文件系统都支持它(!),但如果您能让它为您工作,它可以显着加快速度。

还有一个密切相关的searchfs()系统调用可用于快​​速搜索文件。它会遇到大多数相同的问题。

关于objective-c - OS X 文件系统 API 比重复调用 [NSFileManager attributeOfItemAtPath...] 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15103690/

相关文章:

ios - iPhone : Using localization change language of an app set it in NSUserDefaults

c - 关于数据结构的建议

c++ - 打印 n 个空格字符 -(f)printf 格式

java - 比较 Querydsl、jOOQ、JEQUEL、activejdbc、iciql 和其他查询 DSL

mysql - 使用适当的主键和索引对相对较小的表进行缓慢的 MySQL 查询

ios - 仅旋转 View 而不旋转其 subview

ios - NSNumber 在 Objective-C 中存储 NSDictionary 的对象

javascript - Javascript中位运算的效率

ios - 如何在按下主页按钮后重置 ViewController 并返回到同一个 ViewController

c - 如何打印 5 字节整数值?