在.NET CORE中使用Dapper的SQLite查询速度非常慢



我有一些代码可以从.NET Core 2.0中的本地SQLite数据库文件中提取HTML页面。

此代码在调试模式下运行时工作正常,但在我发布应用程序后在生产环境中运行速度极慢。

我使用秒表来诊断导致问题的代码段,发现connection.QueryFirstOrDefault在调试模式下找到单行需要 2 毫秒,但是在我发布应用程序后,相同的任务需要 1.4 秒。这大约慢了700倍。

//initialize connection
var connection = new SqliteConnection("Data Source=" + dbName);
// Build SQL String
string query = @"SELECT *
               FROM HtmlItems
               WHERE PostID = 1;
// Start Timer
var watch = System.Diagnostics.Stopwatch.StartNew();
Submit query
HtmlItem = connection.QueryFirstOrDefault<HtmlItem>(query);
// End Timer
watch.Stop();
var result = watch.ElapsedMilliseconds();

查询映射到如下所示的对象

public class HtmlItem
{
    public int PostID { get; set; }
    public string PostTitle { get; set; }
    public string PostDescription { get; set; }
    public int PostDate { get; set; } // Unix Timestamp
    public int Hidden { get; set; }
    public string Url { get; set; }
    public string PostHTML { get; set; }
}

调试和生产中使用相同的数据库文件,此数据库文件只有三行。我的应用程序应该是唯一尝试访问该文件的东西。

索引SQLite数据库文件似乎没有任何速度改进。

我想知道如何确定导致我在生产中与数据库的连接速度慢 700 倍的原因。

SQLite 在同步读取文件时,在 .net Core 上使用 dapper 似乎不是很快。

如果您使用异步读取文件,那么它似乎要快得多。

HtmlItem = await connection.QueryFirstOrDefault<HtmlItem>(query);

最新更新