为什么这条线有时表现得很好,有时却一点也不好?
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 秒。这也是它在应用程序中花费的时间,当它很快时。当它很慢时,我会等待大约一分钟,然后在调试器中将其中断以查看它在做什么。
当应用程序是
之前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)}
数据库上下文是新的,在此查询之前未使用过。