gpt4 book ai didi

iphone - 在 iPhone 应用程序中保存数据并下次读取数据的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-03 20:49:50 27 4
gpt4 key购买 nike

在我的 iPhone 词典应用程序中,我需要保存一个字符串数组,其中实际上包含大约 125.000 个不同的单词;这大约会发生变化。 3.2Mb 数据。

我第一次运行应用程序时,我从 SQLite 数据库获取此数据。由于此查询需要很长时间才能运行,因此我需要以某种方式保存数据,以便在每次应用程序启动时更快读取数据。

到目前为止,我已经尝试序列化数组并将其写入文件,后记我已经测试了是否直接写入 NSUserDefaults 以查看是否有任何速度增益,但没有。在这两种方式中,设备加载数据大约需要 7 秒。似乎不从文件(或 NSUserDefaults )中读取实际上需要花费所有时间,但反序列化确实如此:

objectsForCharacters = [[NSKeyedUnarchiver unarchiveObjectWithData:data] retain];

您对如何以某种方式编写此数据结构以便更快地读取/放入内存有什么想法吗?

最佳答案

UITableView 并不是真正设计用于处理数十或数千条记录。如果用户需要很长时间才能找到他们想要的东西。

当用户输入数据时,最好加载表的一部分,也许是几百行,这样看起来他们拥有可用的所有记录(也许提供一个标签来显示记录的数量)他们被留在了过滤 View 中。)

SQLite 数据库应该非常适合这项工作。向单词表添加索引,然后从中选择有限数量的行以向用户显示一些进度。即使是这个简单的表,添加索引也会对性能产生很大影响。

例如,我在 sqlite 数据库中创建了两个表,并用大约 80,000 个单词填充它们

#Create and populate the indexed table
create table words(word);
.import dictionary.txt words
create unique index on words_index on word DESC;

#Create and populate the unindexed table
create table unindexed_words(word);
.import dictionary.txt unindexed_words

然后我运行以下查询并获取每个查询占用的 CPU 时间

.timer ON
select * from words where word like 'sn%' limit 5000;
...
>CPU Time: user 0.031250 sys 0.015625;

select * from unindex_words where word like 'sn%' limit 5000;
...
>CPU Time: user 0.062500 sys 0.0312

结果各不相同,但索引版本始终比未索引版本更快。

通过索引表快速访问字典的各个部分,您可以使用 NSFecthedResultsController 将 UITableView 绑定(bind)到数据库。此类根据需要处理记录、缓存结果以提高性能并允许轻松指定谓词。

example如何使用NSFetchedResultsController包含在iPhone Developers Cookbook中。请参阅main.m

关于iphone - 在 iPhone 应用程序中保存数据并下次读取数据的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1795412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com