为什么这条线有时表现不错,有时根本不好?
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)}
数据库上下文是新的,在此查询之前尚未使用。