【问题标题】:Sometimes Entity Framewok queries are very slow有时实体框架查询很慢
【发布时间】:2023-03-05 01:59:01
【问题描述】:

我们有以下代码:

        public async Task<bool> AreConsumerIdAndSecretExistAsync(AuthenticateConsumerRequest request)
    {
        return await _pplEntities.ApiConsumers.AnyAsync(ac =>
            ac.ConsumerId.Equals(request.ConsumerId) && ac.ConsumerSecret.Equals(request.ConsumerSecret));
    }

这会查询一个只包含三行数据的表。 由于某种原因,执行上述方法有时需要很长时间。 这不是发生此问题的唯一地方。似乎在其他运行多个 SQL 查询的地方,运行第一个查询需要很长时间,而其他查询似乎没有问题。如果我在本地运行应用程序,它会非常快,除了第一次查询。

下面是 New Relic 跟踪的图片,显示了应用程序的速度有多慢。在其他环境中,我们体验到整个请求需要 15 秒以上;这很令人困惑。

我们在 .NET 4.6.1 上运行。

【问题讨论】:

    标签: c# performance entity-framework asp.net-web-api


    【解决方案1】:

    在您的屏幕截图中,左边的数字是它被调用的次数还是时间?......它是它被调用的次数,而不是它所花费的时间...... 所以它不会减慢你的调用速度......

    避免等于,这是一个 c# 函数,不确定它是否有 sql 翻译...我知道 '==' 100% 有。

    在 pr 或 fk 或主查找列上放置索引

    var res = _pplEntities.ApiConsumers
                .Where(ac => ac.ConsumerId  == request.ConsumerId 
                          && ac.ConsumerSecret == request.ConsumerSecret)
              .ToListAsync()
    
    if(res.Any())
    {
         //to stuff and things
    }
    

    【讨论】:

    • 嘿 Seabizkit。左边的数字是操作所用的毫秒数。我已将索引添加到执行查找的两列。遗憾的是,我还注意到另一个对另一个 REST API 的外部调用有时需要很长时间。
    • 您的数据库在物理位置上被 ConsumerId 索引了多远,并且记录数低于 2700 万,那么这应该快于 1 秒。你返回了多少条记录,你返回的列的大小是多少,...我假设返回了 1 行,但看到它是一个列表...所以你在获取..
    • 确保将 linq 转换为正确的 SQL
    • 只包含更多代码,也就是你如何使用它......添加代码。
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多