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

问题描述:

我有一些使用SQLite.Net-PCL作为后备存储的自动化测试。我发现,而不是使用一个实际的文件,你可以通过在“:记忆:”作为连接字符串的路径,创建一个内存数据库,像这样:SQLite.NET内存(:内存:)数据库比基于文件的数据库慢很多

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

出乎我的意料,这比使用普通文件慢得多。在文件中需要大约100ms的测试需要1分钟以上的内存。为什么?

不仅如此,但我的测试多突然开始时,我切换到内存数据库失败 - 大部分似乎与永远不会被创建

表我是真的*使用一个文件 - 基于数据库为我的unittests?

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

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

+0

我不认为这是性能下降的原因。我也为每个测试清除并重新创建基于文件的数据库 – user1202032