0

我有一个使用对象集合的应用程序,速度非常快。现在,我正在为持久性添加一个数据库,所以我开始将东西保存在 SQLite 数据库中。

但现在我发现要慢得多。我认为这是因为磁盘比内存慢。可以将数据库放在内存中吗?我在 SQLite 的文档中找到了一个Inmemory DB,但它在内存中,我需要持久性。

那么,是否有可能将数据库放在内存中以进行性能并在一段时间后保存到磁盘?

谢谢你和问候。

更新:

他们在回答中说这是因为我做了很多插入,这是真的。他们说我应该做一个批量插入。

我的代码在名为 Computers 的内存集合中如下所示:

foreach (line in lines)
{
Computers.Add(new Computer { ComputerName = line});
}

现在在数据库中:

    foreach (line in lines)
    {
string sql = "INSERT into computers VALUES ('"+computerName+"')";
SQLiteCommand command = new SQLiteCommand(sql, dbConnection);                            command.ExecuteNonQuery();
    }

如何在单个批量插入中执行此操作?

4

2 回答 2

2

您可以使用 Backup API 来完成此操作。请参阅http://www.sqlite.org/backup.html 提供了完整的 C 代码示例。

如果您一次执行大量插入,请确保将它们组合在一个事务中。否则 SQLite 会为每个插入等待一个磁盘旋转,这会大大减慢插入过程。这样做可以让您使用基于磁盘的 SQLite 数据库,而不会降低速度。

另见
SQLite 插入速度很慢?

于 2013-01-28T21:16:09.357 回答
0

如果您在内存中有一个数据库并且只是偶尔将其刷新到磁盘,那么您将失去数据库最重要的特性之一,即ACID。换句话说,您的应用程序可以编写数据认为它是持久的,那么随后的问题可能会导致您最终丢失数据。

如果您有足够的 RAM 可供数据库缓存经常访问的项目,那么许多数据库的性能都会非常好(尽管仍然比内存解决方案慢得多)。

首先检查您与数据库的交互到底是什么慢了。您是否正在获取不会一遍又一遍地更改的数据?也许将其缓存在数据库中?您是否对可以合并为单个更新的数据库进行了许多单独的更新?

于 2013-01-28T21:17:18.987 回答