两条迹线之间的读取相同,因此看起来与计划无关。
很有可能只是因为Entity framework在使用结果集时会执行更多操作,因此需要更长的时间。
例如,创建以下标量UDF
CREATE FUNCTION dbo.GetTime()RETURNS CHAr(12)AS BEGIN RETURN ConVERT(VARCHAr(12), GETDATE(), 114) END
然后在Management Studio中运行
SELECt TOP (10) CAST(dbo.GetTime() AS CHAr(8000))FROM sys.all_objects
几乎立即完成,但模拟完成更多工作的客户
using (SqlConnection con = new SqlConnection(connectionString)){ con.Open(); using (SqlCommand command = new SqlCommand( @"SELECt TOP (10) CAST(dbo.GetTime() AS CHAr(8000)) FROM sys.all_objects", con)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader.GetString(0).TrimEnd()); System.Threading.Thread.Sleep(1000); } } }}在事件探查器中显示为持续时间8秒。
上面显示的运行结果是
23:55:54:87023:55:54:87023:55:54:87023:55:55:87023:55:56:87023:55:57:87023:55:58:87023:55:59:87023:56:00:87023:56:01:870
第一行和最后一行之间的时间戳差为7秒。前三行几乎立即返回,并且在SQL Server被延迟在客户端(具有waittype
ASYNC_NETWORK_IO)之前等待,然后继续执行。



