我遇到了一个我以前没见过的相当独特的问题。
客户拥有应用程序服务器和数据库服务器。应用程序服务器(win 2008)运行ASP.NET MVC 3应用程序。数据库服务器(也是Win 2008)运行SQL Server 2008。
每当向数据库发出请求时,w3wp.exe的CPU上升到50-80%,网络流量达到2%(10 Gbps)。这需要一分钟左右的时间,然后显示请求的网页。
我检查了Linq的实际执行时间,只需几毫秒即可获取数据。
我希望这里的一些专业人士能够了解正在发生的事情。当然,它适用于我的机器。
更新
即使是从SQL Server Management Studio(在应用服务器上)执行的检索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之间的这个巨大差异?
答案 0 :(得分:0)
每当对数据库发出请求时,w3wp.exe的CPU都会上升 到50-80%,网络流量达到2%(10 Gbps)。
Reads
和Duration
。