- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序,运行时可以处理数百个文件。现在,每个文件和文件夹都存储在我创建的一个对象中(它包含文件路径、文件类型、文件大小、指向文件中偏移量的指针以及是否是目录),并且这些对象被放置在 NSMutableArray 中。一个大问题是在处理所有文件结束时,我需要获取每个文件夹中所有文件的统计信息。我使用 2 个嵌套的 for 循环来执行此操作,但性能很糟糕。
我的问题是这样的:是否有一种更有效的方法来存储 cocoa 中的文件和文件夹列表(除了 NSMutableArray、集合等),以便我可以快速访问所有文件夹以及这些文件夹内的所有对象?是否有某种结构可以创建文件夹数组以及位于该父文件夹中的文件和文件夹数组?
最佳答案
Right now each file and folder is stored in an object I created (it contains the filepath, filetype, filesize, a pointer to an offset in the file, and if it is a directory), and those objects are placed in a NSMutableArray.
这是正确的解决方案。 C 数组比较棘手,因为您必须自己处理大小管理,并且无法进行边界检查。
A big problem with this is at the end of processing all the files, I need to get statistics for all the files in each folder. I am doing this using 2 nested for loops, and the performance is terrible.
您是否使用 Shark 和/或 Instruments 进行过分析?这是您应该检查的第一件事(如果您还没有检查的话)。瓶颈可能并不在你想象的地方。在您进行分析之前,请停止阅读此答案(以及任何其他答案)。
<小时/>如果您当前正在阻塞主线程执行此任务,请考虑改用 NSOperationQueue。对于顶层中的每个项目,如果它是一个文件,则添加一个检查该文件的操作,如果它是一个目录,则添加一个对目录内容执行相同迭代的操作。如果您需要 Snow Leopard,您会在这里找到方便的 block ,因为您不必显式告诉目录 list 操作将检查文件操作添加到哪个队列。
您可能应该限制队列一次运行的操作数量,以免最终运行太多操作。 Mike Ash has details (那篇文章是关于 GCD 的,但是从 Snow Leopard 开始,NSOperationQueue 是基于 GCD 的)。
假设您在 UI 中显示运行总计,则可以使用主队列来保存向总计添加新信息的操作(可能基于 block )。如果您支持 Leopard,您可以创建自己的“主”队列,但您必须自己让操作在主线程上运行。
顺便说一句,如果您要总计文件大小,您应该考虑是否要在 inode 上进行统一。如果我将一个 200 MiB 文件硬链接(hard link)到其他三个位置,您将看到四个文件,但它们实际上都是同一个文件,因此它们只占用 200 MiB,而不是 800。
关于cocoa - 文件列表的最佳 cocoa 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740948/
我目前正在尝试基于哈希表构建字典。逻辑是:有一个名为 HashTable 的结构,其中包含以下内容: HashFunc HashFunc; PrintFunc PrintEntry; CompareF
如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗? 指向对象 A 的指针(包含指向对象
像这样的代码 package main import "fmt" type Hello struct { ID int Raw string } type World []*Hell
我有一个采用以下格式的 CSV: Module, Topic, Sub-topic 它需要能够导入到具有以下格式的 MySQL 数据库中: CREATE TABLE `modules` ( `id
通常我使用类似的东西 copy((uint8_t*)&POD, (uint8_t*)(&POD + 1 ), back_inserter(rawData)); copy((uint8_t*)&PODV
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我有一个指向结构的指针数组,我正在尝试使用它们进行 while 循环。我对如何准确初始化它并不完全有信心,但我一直这样做: Entry *newEntry = malloc(sizeof(Entry)
我正在学习 C,我的问题可能很愚蠢,但我很困惑。在这样的函数中: int afunction(somevariables) { if (someconditions)
我现在正在做一项编程作业,我并没有真正完全掌握链接,因为我们还没有涉及它。但是我觉得我需要它来做我想做的事情,因为数组还不够 我创建了一个结构,如下 struct node { float coef;
给定以下代码片段: #include #include #define MAX_SIZE 15 typedef struct{ int touchdowns; int intercepti
struct contact list[3]; int checknullarray() { for(int x=0;x<10;x++) { if(strlen(con
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Empty “for” loop in Facebook ajax what does AJAX call
我刚刚在反射器中浏览了一个文件,并在结构构造函数中看到了这个: this = new Binder.SyntaxNodeOrToken(); 我以前从未见过该术语。有人能解释一下这个赋值在 C# 中的
我经常使用字符串常量,例如: DICT_KEY1 = 'DICT_KEY1' DICT_KEY2 = 'DICT_KEY2' ... 很多时候我不介意实际的文字是什么,只要它们是独一无二的并且对人类读
我是 C 的新手,我不明白为什么下面的代码不起作用: typedef struct{ uint8_t a; uint8_t* b; } test_struct; test_struct
您能否制作一个行为类似于内置类之一的结构,您可以在其中直接分配值而无需调用属性? 前任: RoundedDouble count; count = 5; 而不是使用 RoundedDouble cou
这是我的代码: #include typedef struct { const char *description; float value; int age; } swag
在创建嵌套列表时,我认为 R 具有对列表元素有用的命名结构。我有一个列表列表,并希望应用包含在任何列表中的每个向量的函数。 lapply这样做但随后剥离了列表的命名结构。我该怎么办 lapply嵌套列
我正在做一个用于学习目的的个人组织者,我从来没有使用过 XML,所以我不确定我的解决方案是否是最好的。这是我附带的 XML 文件的基本结构:
我是新来的 nosql概念,所以当我开始学习时 PouchDB ,我找到了这个转换表。我的困惑是,如何PouchDB如果可以说我有多个表,是否意味着我需要创建多个数据库?因为根据我在 pouchdb
我是一名优秀的程序员,十分优秀!