You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core(Dapper)下SQLite查询随机出现150ms额外延迟问题

SQLite读查询随机出现150ms左右额外延迟问题

问题基础信息

  • 技术栈:.NET Core 3.1,分别测试两种数据访问方案,异常表现完全一致:
    • Dapper 2.0.78 + Microsoft.Data.Sqlite 3.1.25
    • EF Core,依赖包版本Microsoft.EntityFrameworkCore.Sqlite 3.1.22
  • 异常表现:部分SELECT查询会随机比正常查询多耗时约150ms,延迟全部出现在查询执行阶段,结果集遍历无额外耗时
  • 已确认的问题特征:
    • 与运行环境无关,本地开发机即可复现
    • 与数据库数据量无关,空数据库场景下也可触发
    • 异常出现时无任何并发写入操作,全程仅存在读请求

并发测试耗时统计

执行1000次并发查询测试,部分耗时日志如下:

734. All=8 ms, Query=8 ms, ToList=0ms
735. All=2 ms, Query=2 ms, ToList=0ms
736. All=2 ms, Query=2 ms, ToList=0ms
737. All=4 ms, Query=4 ms, ToList=0ms
738. All=3 ms, Query=3 ms, ToList=0ms
739. All=2 ms, Query=2 ms, ToList=0ms
740. All=158 ms, Query=158 ms, ToList=0ms
741. All=2 ms, Query=2 ms, ToList=0ms
742. All=1 ms, Query=1 ms, ToList=0ms
743. All=1 ms, Query=1 ms, ToList=0ms
744. All=1 ms, Query=1 ms, ToList=0ms
745. All=158 ms, Query=158 ms, ToList=0ms
746. All=1 ms, Query=1 ms, ToList=0ms
747. All=158 ms, Query=158 ms, ToList=0ms
748. All=2 ms, Query=2 ms, ToList=0ms
749. All=157 ms, Query=157 ms, ToList=0ms
750. All=1 ms, Query=1 ms, ToList=0ms
751. All=3 ms, Query=3 ms, ToList=0ms
752. All=1 ms, Query=1 ms, ToList=0ms
753. All=1 ms, Query=1 ms, ToList=0ms
754. All=3 ms, Query=3 ms, ToList=0ms
755. All=1 ms, Query=1 ms, ToList=0ms
756. All=1 ms, Query=1 ms, ToList=0ms
757. All=1 ms, Query=1 ms, ToList=0ms
758. All=1 ms, Query=1 ms, ToList=0ms
759. All=1 ms, Query=1 ms, ToList=0ms
760. All=1 ms, Query=1 ms, ToList=0ms
761. All=5 ms, Query=5 ms, ToList=0ms
762. All=1 ms, Query=1 ms, ToList=0ms

问题复现代码

public static void Main(string[] args)
{
    var tasks = new List<Task>();
    var times = new List<TimeInfo>();
    Stopwatch sw = new Stopwatch();

    for (int i = 1; i <= 1000; i++)
    {
        var j = i * 1;
        tasks.Add(Task.Run(() =>
        {
            Stopwatch sw = new Stopwatch();
            Stopwatch swAll = new Stopwatch(); 
            swAll.Start();
            sw.Start();
            IEnumerable<Cross> result;
            using (var cnn = new SqliteConnection("Data Source=crosses.db"))
            {
                result = cnn.Query<Cross>("SELECT * FROM Crosses WHERE ArticleId=2106053  AND Source=7");
            }
            var timeRequest = sw.ElapsedMilliseconds;
            sw.Restart();
            var list = result.ToList();
            sw.Stop();
            var timeToList = sw.ElapsedMilliseconds;
            swAll.Stop();
            times.Add(new TimeInfo()
            {
                I = j,
                TimeAll = swAll.ElapsedMilliseconds,
                TimeQuery = timeRequest,
                TimeToList = timeToList,
            });
        }));
    }

    Task.WaitAll(tasks.ToArray());
    foreach (var item in times.OrderBy(w => w.I))
    {
        Console.WriteLine("{0}. All={1} ms, Query={2} ms, ToList={3}ms", item.I, item.TimeAll, item.TimeQuery, item.TimeToList);
    }
    Console.ReadKey();
}

数据库表结构

测试库仅包含单表Crosses,已为查询条件字段ArticleId、Source创建联合索引,结构定义如下:

create table Crosses
(
    Id             INTEGER not null
        constraint PK_Crosses
            primary key autoincrement,
    ArticleId      INTEGER not null,
    CrossId        INTEGER not null,
    CrossBrand     TEXT,
    CrossArticle   TEXT,
    Source         INTEGER not null,
    AdditionalInfo TEXT
);

create index IX_Crosses_ArticleId_Source
    on Crosses (ArticleId, Source);

内容的提问来源于stack exchange,提问作者Evgeny Tsaplinov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:54:25