【发布时间】:2016-02-22 10:54:12
【问题描述】:
我有 100 GB 数据。我想在 VB.Net 中使用 SQLite 将其加载到内存中。我有 32 GB 内存。我希望 SQLite 占用 24 GB RAM,而其他 8 GB 将保留用于其他操作系统任务。当它达到 24 GB RAM 限制时,它应该开始自动将数据刷新到某个磁盘文件。
首先:我使用了内存数据库。
Dim cn As SQLiteConnection = New SQLiteConnection("Data Source=:memory:")
但它消耗 31.8 GB RAM,然后操作系统 (Windows 7) 进入并控制并开始使用虚拟内存(将数据保存到磁盘)。但它确实真的减慢了计算机的速度。简而言之,当加载大量数据(通过使用内存方法)时,SQLite 会耗尽所有内存并停止计算机。
第二:我使用临时数据库加载数据。
Dim cn As SQLiteConnection = New SQLiteConnection("FullUri=file:")
但是当 SQLite 消耗接近 2GB 的 RAM 时,它会通过将数据刷新到文件“C:\Users\Administrator\AppData\Local\Temp\etilqs_d4Fsx23dc”来释放它并开始加载下一个数据。简而言之,当加载大量数据时(通过使用临时 DB 方法),它使用的 RAM 和更多的磁盘非常少。
第一个场景吃掉所有的内存,第二个场景消耗的内存非常少。我需要由我自己控制的中间方式等。SQLite 需要 24 GB RAM,OS 需要 8 GB,当达到 24 GB RAM 限制时,它应该开始自动将数据刷新到磁盘文件。
【问题讨论】:
标签: vb.net sqlite memory-management in-memory-database temporary