我有一个视图,我的数据库中的AdvertView,这个视图是一些表(广告,客户,属性)之间的简单连接。然后我有一个简单的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()。所以我的问题是,为什么托勒斯函数需要这么长时间?
答案 0 :(得分:3)
GetAdvertForCustomerID不返回结果,它返回一个查询。
ToList枚举查询。结果在那时水合。数据库跳转发生在ToList调用中。
您应该获取生成的sql(通过使用SqlProfiler或DataContext.Log属性),并将其带到查询分析器以检查执行计划和IO(SET STATISTICS IO ON)。
答案 1 :(得分:1)
.ToList将执行查询,因此包括整个数据库的往返,获取数据,以及为返回的每条记录实现实体对象... ...您最有可能花费大部分时间db所以,仔细看看你的观点的执行计划。