Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance NSDirectoryEnumerator';fileAttributes方法?_Performance_Cocoa_Filesystems - Fatal编程技术网

Performance NSDirectoryEnumerator';fileAttributes方法?

Performance NSDirectoryEnumerator';fileAttributes方法?,performance,cocoa,filesystems,Performance,Cocoa,Filesystems,迭代目录时调用fileAttributes方法的成本有多高 特别是,我想检查正在枚举的路径是否是目录。使用fileAttributes字典还是使用文件管理器更好?(下面的例子) fileAttributes除了isDirectory之外,还返回大量“不必要”的信息,下面是一个示例输出 2011-12-23 16:17:40.523 App[10190:707] File Attributes: { NSFileCreationDate = "2011-10-23 04:04:51 +00

迭代目录时调用fileAttributes方法的成本有多高

特别是,我想检查正在枚举的路径是否是目录。使用fileAttributes字典还是使用文件管理器更好?(下面的例子)

fileAttributes
除了isDirectory之外,还返回大量“不必要”的信息,下面是一个示例输出

2011-12-23 16:17:40.523 App[10190:707] File Attributes: {
    NSFileCreationDate = "2011-10-23 04:04:51 +0000";
    NSFileExtensionHidden = 0;
    NSFileGroupOwnerAccountID = 80;
    NSFileGroupOwnerAccountName = admin;
    NSFileModificationDate = "2011-10-23 04:07:52 +0000";
    NSFileOwnerAccountID = 501;
    NSFileOwnerAccountName = Tony;
    NSFilePosixPermissions = 493;
    NSFileReferenceCount = 6;
    NSFileSize = 204;
    NSFileSystemFileNumber = 8381694;
    NSFileSystemNumber = 234881029;
    NSFileType = NSFileTypeDirectory;
}
然而,调用fileManager似乎也是浪费,因为我们已经在枚举有问题的目录


有什么见解吗?

在大多数文件系统上,这两种方法都需要同样的时间来检查文件是否存在以及它是否是目录,因为除了目录条目数据之外,还需要访问inode数据。这相当于对每个文件进行“”调用

获取(完整)文件属性需要额外读取有关该文件的信息。inode包含有关文件大小、类型等的信息。每个文件属性调用可能需要额外的IO读取操作(此处忽略任何缓存)

然而,HFS/HFS+是不同的。它的特殊之处在于将文件类型存储在目录项()中。因此,您可以检查文件是否为目录,而无需访问inode信息。NSFileManager的
fileExistsAtPath:isDirectory:
应该快得多。有可能,这只在涉及数百或数千个文件时才真正重要,但无论如何都应该更快

顺便说一句:除非禁用了“filetype”标志,否则ext4也是一个文件类型

2011-12-23 16:17:40.523 App[10190:707] File Attributes: {
    NSFileCreationDate = "2011-10-23 04:04:51 +0000";
    NSFileExtensionHidden = 0;
    NSFileGroupOwnerAccountID = 80;
    NSFileGroupOwnerAccountName = admin;
    NSFileModificationDate = "2011-10-23 04:07:52 +0000";
    NSFileOwnerAccountID = 501;
    NSFileOwnerAccountName = Tony;
    NSFilePosixPermissions = 493;
    NSFileReferenceCount = 6;
    NSFileSize = 204;
    NSFileSystemFileNumber = 8381694;
    NSFileSystemNumber = 234881029;
    NSFileType = NSFileTypeDirectory;
}