1

为什么这条线有时表现得很好,有时却一点也不好?

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 个项目。

更新:

我有一个关于日期、国家、名称的聚集索引。

当我在管理工作室中运行查询时,我尝试了大约 20 次,每次都需要 2 秒。这也是它在应用程序中花费的时间,当它很快时。当它很慢时,我会等待大约一分钟,然后在调试器中将其中断以查看它在做什么。

当应用程序是

之前foreachmessages包含:

{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)}

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

4

0 回答 0