【问题标题】:How to control SQLite in memory DB consumption using C# vb.net如何使用 C# vb.net 控制内存 DB 消耗中的 SQLite
【发布时间】: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


    【解决方案1】:

    要控制 SQLite 用于磁盘数据库的内存量,请使用 PRAGMA cache_size。但是,任何未使用的内存都会被 OS 用于文件缓存,因此 SQLite 的缓存不宜设置过大。

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

    【讨论】:

    • 谢谢!我会查一下。但你没有提到模式? (1) 内存数据库或 (2) 临时数据库
    • 我所说的适用于磁盘数据库(临时和永久)。
    猜你喜欢
    • 2011-12-13
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-03-15
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多