使用 StrictMode 检测 Android 上被遗忘的 SQLite 事务?
执行多个 SQL 语句而不将它们放入一个事务中是一个严重的瓶颈(参见例如 http://www.sqlite.org/faq.html#q19")。 sqlite.org/faq.html#q19)。我还没有彻底检查 SQLite 在 Android 上的配置方式,但有趣的是,当我在更多地方使用事务时,我发现我的应用程序的性能显着提高。
是否可以使用 StrictMode 检测忘记使用事务的情况?如果没有,是否可以考虑将其用于 StrictMode 的未来版本?检测起来可能有些棘手,但可能有两种不同的策略:1) 事务外部的非选择语句,或 2) 在短时间内执行的事务外部的多个非选择语句。
Executing multiple SQL statements without putting them into one transaction is a severe bottleneck (see e.g. http://www.sqlite.org/faq.html#q19). I haven't thoroughly checked how SQLite is configured on Android, but anecdotally I perceived dramatical performance increase within my on app when using transactions in more places.
Is it possible to detect instances where one forgets to use transactions using StrictMode? If not, could that be considered for a future release of StrictMode? It might be somewhat tricky to detect, but two different strategies could be, 1) non-select statements outside transaction, or 2) multiple non-select statements outside transaction executed within a short period of time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,这听起来是一件好事。我可以想象这样的 API:
StrictMode.catchWritesOutsideTransactionsOn(SQLiteDatabase db);
我们一直在考虑将其他 SQLite 挂钩纳入 StrictMode(主要是选择缺失的索引等),但这也是一个好主意!
Yeah, that sounds like a good thing to catch. I could imagine an API like:
StrictMode.catchWritesOutsideTransactionsOn(SQLiteDatabase db);
We've been considering other SQLite hooks into StrictMode (mostly around selects missing indexes and such), but this is a good idea too!