我有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/