vb.net - 如何使用C#vb.net控制内存DB消耗中的SQLite

标签 vb.net sqlite memory-management in-memory-database temporary

我有100 GB的数据。我想在VB.Net中使用SQLite将其加载到内存中。我有32 GB RAM。我希望SQLite占用24 GB的RAM,而其他8 GB仍可用于其他OS任务。当它达到24 GB RAM限制时,它应该开始自动将数据刷新到某些磁盘文件中。

首先:我使用了内存数据库。

Dim cn As SQLiteConnection = New SQLiteConnection("Data Source=:memory:")


但是它消耗了31.8 GB的RAM,然后OS(Windows 7)进入并控制并开始使用虚拟内存(将数据保存到磁盘)。但这确实确实减慢了计算机的速度。简而言之,当何时加载大量数据(通过使用内存中的方法)时,SQLite会消耗掉所有内存并停止计算机。

第二:我使用临时数据库加载了数据。

Dim cn As SQLiteConnection = New SQLiteConnection("FullUri=file:")


但是,当SQLite消耗了将近2GB的RAM时,它将通过将数据刷新到文件“ C:\ Users \ Administrator \ AppData \ Local \ Temp \ etilqs_d4Fsx23dc”并开始加载下一个数据来释放它。简而言之,当加载大量数据(通过使用临时DB方法)时,它将使用非常少的RAM和更多的磁盘。

第一种情况吃掉了所有内存,第二种情况消耗了很少的RAM。我需要中间的方式应该在我自己的控件中。SQLite为24 GB RAM,操作系统为8 GB,当达到24 GB RAM限制时,它将开始自动将数据刷新到磁盘文件中。

最佳答案

要控制SQLite用于磁盘数据库的内存量,请使用PRAGMA cache_size。但是,操作系统会将所有未使用的内存用于文件缓存,因此SQLite的缓存不应设置得太大。

要加快对磁盘的写入速度(但使其与内存数据库一样不可靠),请使用PRAGMA journal_mode = OFF

关于vb.net - 如何使用C#vb.net控制内存DB消耗中的SQLite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35551758/

相关文章:

asp.net - 如何设置 SelectedIndexChanged 和普通面板更新事件之间的处理时间事件?

ios - 如何将 html 页面(URL)插入 SQLite 数据库?

database - SQLite WAL 在电源故障时有多安全?

ios - 如何获取模拟器的iOS内存消耗信息?

android - 一般 Android 内存泄漏,特别是谷歌分析跟踪器

vb.net - 使用 VB.net 自动执行任务

vb.net - msstdfmt.dll 1.0.0 缺失错误

vb.net - 使用VB.NET发布ClickOnce安装报错 "Exception reading from manifest"

iphone - 如何将文本作为段落存储在 iPhone 应用程序的 SQLite 数据库中?

c - 无法修复的内存泄漏