1

我有100 GB的數據。我想使用VB.Net中的SQLite將它加載到內存中。我有32 GB的RAM。我希望SQLite佔用24 GB內存,其他8 GB的空間對於其他操作系統任務仍然是免費的。當它達到24 GB RAM限制時,它應該自動將數據刷新到某個磁盤文件。如何使用C#vb.net控制內存數據庫消耗SQLite

第一:我使用了內存數據庫。

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內存它通過將數據刷新到文件釋放它的「C:\用戶\管理\應用程序數據\本地的\ Temp \ etilqs_d4Fsx23dc」,並開始加載下一個數據。總之,何時加載巨大的數據(通過使用臨時數據庫方法),它使用非常少的RAM和更多磁盤。

第一種情況是吃所有內存,第二種方式消耗的內存非常少。我需要中間的方式,應該在我自己的控制中,等等。24 GB內存的SQLite和8 GB的操作系統,當它達到24 GB RAM的限制,它應該開始刷新數據自動磁盤文件。

回答

0

要控制SQLite用於磁盤上數據庫的內存量,請使用PRAGMA cache_size。但是,任何未使用的內存將被操作系統用於文件緩存,因此SQLite的緩存不應設置得太大。

要加快寫入磁盤的速度(但使其與內存數據庫一樣不可靠),請使用PRAGMA journal_mode = OFF

+0

thnaks!我會查一下。但你沒有提到這種模式? (1)在內存中db 或 (2)Temprory db –

+0

我說的適用於磁盤數據庫(包括臨時和永久)。 –