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

LinqToDB DataConnection退出using块未释放引发数据库连接泄漏

.NET HostedService中LinqToDB数据库连接泄漏问题

问题现象

按规范编写的资源释放逻辑未生效,始终存在连接泄漏问题:using块按设计本应自动完成资源释放,但数据库端连接始终无法正常关闭。
具体异常表现:

  • 数据库侧观测到连接持续保持打开状态
  • 运行过程中不断新建连接,完全没有连接池复用的表现
  • 已验证Dispose执行逻辑:连接类实例被释放后,调用相关方法会正常抛出ObjectDisposedException,说明Dispose方法本身确实被触发执行

问题相关代码

问题出在HostedService的StartAsync启动初始化逻辑中,代码如下:

public async Task StartAsync(CancellationToken cancellationToken)
{
    using (var scope = _serviceProvider.CreateScope())
    {
        _logger.LogDebug($"Инициализация операторов");
        using (var operatorRepo = scope.ServiceProvider.GetService<IOperatorRepository>()) {
            var availableOperators = operatorRepo.GetAllOperatorsWithSkills();
            _logger.LogDebug($"Инициализовано {availableOperators.Count()} операторов");

            foreach (OperatorRow opRow in availableOperators)
            {
                OperatorMeta opMeta = new(opRow.Idr, opRow.Name, opRow.Number, opRow.OperatorSkills.Select(skill => (skill.SkillId, skill.Experience)));
                if (!TryAddOperator(opMeta))
                    throw new ArgumentException($"Оператор с id {opRow.Idr} уже был добавлен!");
            }
            if (Convert.ToBoolean(_configuration.GetSection("isOperatorTesting")?.Value))
            {
                _globalOperatorPool.TryAdd(
                    -1,
                    new CampaignOperator(
                        new OperatorMeta(-1, "Test operator", _configuration.GetSection("testOperatorNumber").Value, Enumerable.Empty<(int, int)>()),
                        OperatorState.Unassigned)
                    );
            }
        }
    }
}

已尝试操作与已知上下文

  • 曾在using块内部额外增加try-finally块包裹业务逻辑做资源释放兜底,未解决问题
  • IOperatorRepository的底层实现经过两层类继承,最终派生自LinqToDB.DataConnection,整个继承链中只有这个最终基类实现了IDisposable接口
  • 目前无明确排查方向,寻求问题定位思路

内容的提问来源于stack exchange,提问作者Johnny Cache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:39:04