UserDefaults 是一直塞在 RAM 当中、还是 SSD 直读?

333 天前
 ShikiSuen

我弄的威注音输入法( macOS )目前用的是 plist 辞典,一直都是塞在 RAM 当中的,导致 RAM 占用居高不下( 170MB 左右)。这样肯定无法移植到 iOS 上,因为 iOS 对副厂输入法有 30MB RAM 的配额封顶限制。

但我这套输入法还对 macOS 10.9 有兼容性需求,所以 SQLite.swift 用不了了。

忽然想到 UserDefaults ,于是想知道这玩意是一直在 RAM 当中、还是 SSD 直接读取(按需读取)。 如果是后者的话,没准可以节省 RAM 开支。

1362 次点击
所在节点    iDev
7 条回复
qq2511296
333 天前
你尝试下这个 mmkv
https://github.com/Tencent/MMKV
qq2511296
333 天前
另外微信这 wcdb 也开源了
https://github.com/Tencent/wcdb
maxmak
333 天前
后者,value 多的话,会很慢
ShikiSuen
333 天前
@maxmak 太谢谢了。这输入法原厂辞典有简体中文与繁体中文两种(我不信任繁简转换,因为一定会出错),每个辞典 plist 不到 12MB 。
shawndev
332 天前
UserDefaults 读写效率不行,相比而言 MMAP 要好得多。具体到你的场景,其实可以参考 rime 的做法,用 LevelDB 。
shawndev
332 天前
BTW ,Plist 的信噪比太低了不适合作为词库的格式。可以自己定义一个 bin 格式或者参考 rime 的做法用 trie 做存储。
ShikiSuen
331 天前
@shawndev 今天刚刚换了 JSON ,读取速度比 Plist 慢了一倍(原先一秒,现在两秒)。
但整个记忆体占用量下降了,且档案体积也小了不少(因为索引由 UTF16 变成 UTF8 )。

感谢推荐 LevelDB ,回头我再研究一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/944705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX