SQLite.NET内存中(:内存:)数据库比基于文件的数据库慢很多

时间:2017-07-02 12:26:26

标签: sqlite xamarin xamarin.ios xamarin.forms sqlite-net

我有一些使用SQLite.Net-PCL作为后备存储的自动化测试。我发现不是使用实际文件,而是可以传入“:memory:”作为连接字符串的路径,以创建内存数据库,如下所示:

public class MyRepositoryService : SQLiteAsyncConnection
{
    public MyRepositoryService() 
        : base(() => new SQLiteConnectionWithLock(
                new SQLitePlatformGeneric(),
                new SQLiteConnectionString(
                    ":memory:",
                    false)
                ))
    {
    }
}

令我惊讶的是,这比使用常规文件要慢得多。在内存中,文件中需要大约100毫秒的测试需要1分钟以上。为什么呢?

不仅如此,当我切换到内存数据库时,我的多个测试突然开始失败 - 大多数似乎与从未创建的表有关

我真的被迫使用基于文件的数据库进行单元测试吗?

1 个答案:

答案 0 :(得分:0)

连接关闭时内存数据库消失。

因此,每个测试都会创建一个新数据库,并且必须重新创建所有表。