我遇到了一个我以前从未见过的相当独特的问题。
客户有一个应用服务器和一个数据库服务器。应用程序服务器(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 之间的巨大差异?