我正在搜索一个大的plist文件,其中包含了数万个字典,每个字典都有两个键/字符串对。我的搜索算法遍历字典,当它在字典中的任何一个字符串中找到文本匹配时,就会插入字典的内容。下面是它的工作原理:
NSDictionary *eachEntry;
NSArray *rawGlossaryArray = [[NSArray alloc] initWithContentsOfFile:thePath]; // this contains the contents of the plist
for (eachEntry in rawGlossaryArray)
{
GlossaryEntry *anEntry = [[GlossaryEntry alloc] initWithDictionary:eachEntry];
NSRange titleResultsRange = [anEntry.title rangeOfString:filterString options:NSCaseInsensitiveSearch];
NSRange defResultsRange = [anEntry.definition rangeOfString:filterString options:NSCaseInsensitiveSearch];
if (titleResultsRange.length > 0 || defResultsRange.length > 0) {
// store that item in the glossary dictionary with the name as the key
[glossaryDictionary setObject:anEntry forKey:anEntry.title];
}
[anEntry release];
}每次执行搜索时,我的iPhone应用程序都会有大约3-4秒的延迟(至少在设备上是这样;在模拟器中一切都运行得相当快)。有人能建议我如何优化这个搜索吗?
发布于 2009-07-01 17:32:03
如果不看数据集,我就不能确定,但如果你分析它,你会把大部分时间花在-rangeOfString:options:上。如果是这样的话,如果不从根本上改变用来存储数据的数据结构,您将无法提高性能。
您可能希望使用指向对象的字符串和子字符串来构造一些排序trie。它的设置要复杂得多,插入它的代价也会更高,但查找速度会非常快。既然您无论如何都要序列化结构,那么昂贵的插入应该不是什么大问题。
发布于 2009-07-01 21:30:03
这就需要使用数据库,您预先填充数据库并放入应用程序中。
发布于 2009-07-01 16:45:58
以下是一些建议:
在这个循环中,你做了大量的分配和释放。,,
https://stackoverflow.com/questions/1070140
复制相似问题