我的数据库中有一个 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/