Linq到EF有时会变慢,有时候不会

时间:2013-09-09 09:51:35

标签: c# performance entity-framework linq-to-entities

为什么这条线有时表现不错,有时根本不好?

var messages = db.Items.Where(b => 
                              b.Date == selectedDate && 
                              b.Country == selectedCountry).ToList();

即使对于相同的selectedDate,selectedCountry也没有明显的数据库更改。 当它很慢时,我看到运行此行的计算机或SQL Server计算机上没有特别的负载。

如果我只是在应用程序运行缓慢时中断并重新启动应用程序,它有时会设法快速执行该行。有时它很快。

如果我将其更改为以下内容:

 var messages = db.Messages.Where(b => 
                                  b.Date == selectedDate && 
                                  b.Country == selectedCountry);
 foreach (var message in messages) 
 {
     ddlMessages.Items.Add(messages.Name);
 }

我仍然遇到同样的问题,但是慢速行是以ddlMessages开头的行,即应用程序实际从数据库读取的行。

我的选择会返回约400项。

更新

我在日期,国家,名称上有一个聚集索引。

当我在管理工作室运行查询时,花了2秒钟,我尝试了大约20次。这是关于应用程序所需的时间,当它很快时。 当它很慢时,我等待大约一分钟,然后在调试器中打破它,看看它在做什么。

申请时

foreach之前,messages包含:

{SELECT 
[Extent1].[Date] AS [Date], 
[Extent1].[Country] AS [Country], 
[Extent1].[Name] AS [Name], 
[Extent1].[Data] AS [Data]
FROM [dbo].[Message] AS [Extent1]
WHERE ([Extent1].[Date] = @p__linq__0) AND ([Extent1].[Country] = @p__linq__1)}

数据库上下文是新的,在此查询之前尚未使用。

0 个答案:

没有答案