我看到一些非常奇怪的性能,它们与使用.NET Framework版本4的Entity Framework Code-First进行的非常简单的查询有关。LINQ2Entities查询如下所示:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
这将花费3000毫秒以上的时间来执行。生成的SQL看起来非常简单:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
通过Management Studio运行时,该查询几乎立即运行。当我更改C#代码以使用SqlQuery函数时,它将在5到10毫秒内运行:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
因此,使用完全相同的SQL,在两种情况下,生成的实体都会进行更改跟踪,但是两者之间的性能差异很大。是什么赋予了?
Performance Considerations for Entity Framework 5