我有一个桌面应用程序,将其数据保存在本地 H2 数据库中。我正在使用 Squeryl 连接到数据库。
数据库的大小非常小(大约 10kB)。我遇到了严重的性能问题,并且正在进行大量的磁盘 IO。我只是在读取数据库,因此我希望可以缓存完整的数据;我什至将缓存大小设置为某个值(远高于总数据库大小)。我也尝试禁用锁定但没有结果。
我的程序在数据库上执行了很多小查询;基本上我有一个 SwingTableModel
对每个表条目(每行的每一列)进行查询。我将这些调用中的每一个包装到一个 Squeryltransaction
块中。
我使用 JVisualVM 创建了一个配置文件,我怀疑以下调用树显示了问题。最上面的方法是从我的代码中读取访问权限。
问题
我该如何解决这个问题或我做错了什么?不知何故,我希望我应该能够对一个小到可以保存在 1MB 内存以下的数据库进行许多小调用。为什么这个磁盘 IO 会继续,我该如何避免呢?