このラインがうまく機能する場合とまったく機能しない場合があるのはなぜですか?
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
、つまり、アプリケーションが実際に DB から読み取る場所です。
私の選択では、約 400 のアイテムが返されます。
アップデート:
日付、国、名前にクラスター化インデックスがあります。
管理スタジオでクエリを実行すると、約 20 回試行するたびに 2 秒かかりました。これは、高速な場合でも、アプリケーションでかかる時間とほぼ同じです。遅いときは、約 1 分待ってからデバッガーでブレークし、動作を確認します。
アプリケーションが
の前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)}
データベース コンテキストは新しく、このクエリの前に使用されていません。