linq-to-sql - linq to sql 查询的迭代非常慢

标签 linq-to-sql c#-4.0

我的数据库中有一个 View AdvertView,该 View 是一些表(广告、客户、属性)之间的简单联接。然后我有一个简单的 linq 查询来获取客户的所有广告:

public IEnumerable<AdvertView> GetAdvertForCustomerID(int customerID)
{
    var advertList = 
        from advert in _dbContext.AdvertViews
        where advert.Customer_ID.Equals(customerID)
        select advert;
    return advertList;
}

然后我希望将其映射到我的 MVC 应用程序的 modelItems:

public List<AdvertModelItem> GetAdvertsByCustomer(int customerId)
{
    List<AdvertModelItem> lstAdverts = new List<AdvertModelItem>();
    List<AdvertView> adViews = _dataHandler.GetAdvertForCustomerID(customerId).ToList();
    foreach(AdvertView adView in adViews)
    {
        lstAdverts.Add(_advertMapper.MapToModelClass(adView));
    }
    return lstAdverts;
}

我原以为 SQL 会出现一些性能问题,但问题似乎出在 .ToList() 函数上。我正在使用 ANTS 性能分析器,它报告该函数的总运行时间为 1.400 毫秒,其中 850 毫秒与 ToList() 相关。所以我的问题是,为什么 tolist 函数在这里需要这么长时间?

最佳答案

GetAdvertForCustomerID 不返回结果,而是返回查询。

ToList 枚举查询。此时结果是水合的。数据库访问发生在 ToList 调用中。

您应该获取生成的 sql(通过使用 SqlProfiler 或 DataContext.Log 属性),并将其带到查询分析器以检查执行计划和 IO(SET STATISTICS IO ON)。

关于linq-to-sql - linq to sql 查询的迭代非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052362/

相关文章:

asp.net-mvc-3 - 在 MVC3 中创建由其他模型的对象组成的 View 模型

.net - Linq to SQL 是否比 Linq to Entities 更快?

c# - 使用 Linq 在 C# 中进行日期范围插值

c# - 返回包含 2 个子类的 IQueryable

c# - LINQ2SQL 中用于共享常用方法的抽象类

c# - 需要类(class)帮助吗?可能很简单

.net - linq是游标吗?

c# - 如何序列化包含基本类型和基本类型数组的元组?

sql - Sql Select 查询中的多个日期范围

css - ASP Repeater - 无法在 DIV 中添加类