我遇到了一个我从未见过的非常独特的问题。
客户有一个应用服务器和一个数据库服务器。应用服务器(win 2008)运行ASP.NET MVC 3应用程序。数据库服务器(也是Win 2008)运行server 2008。
每当向数据库提出请求时,w3wp.exe的CPU高达50-80%,网络流量达到2% ( 10 Gbps)。这需要一分钟左右的时间来显示请求的网页。
我检查了实际的Linq执行时间,得到数据只需几毫秒。
我希望这里的一些专业人士能对发生的事情有所了解。当然,它能在我的机器上工作。
更新
甚至从(在应用服务器上)执行的检索828行的查询也需要整整12秒才能完成.所以我想问题不在于应用程序,而在于数据库服务器或连接上的某个地方。
更新2我发现了一些有趣的东西。
这是缓慢的代码:
MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IEnumerable<Requests> Entities = DataContext.Requests;
using (profiler.Step("get data")) {
IEnumerable<Requests> dataset = from x in Entities
where x.ControleStatus == 4
orderby x.ID
select x;
}但是,当我将IEnumerable改为IQueryable时,代码执行速度要快10倍:
MyAppDataContext DataContext = MyAppDataContext.CreateNewContext();
IQueryable<Requests> Entities = DataContext.Requests.AsQueryable();
using (profiler.Step("get data")) {
IQueryable<Requests> dataset = from x in Entities
where x.ControleStatus == 4
orderby x.ID
select x;
}所以我的问题是:是什么导致了IEnumerable和IQueryable之间的巨大差异?
发布于 2012-06-13 15:59:30
每当向数据库提出请求时,
用于w3wp.exe的CPU高达50-80%,网络流量达到2% ( 10 Gbps)。
Duration.
https://stackoverflow.com/questions/11018153
复制相似问题