Vedo delle prestazioni davvero strane relative a una query molto semplice utilizzando Entity Framework Code-First con .NET framework versione 4. La query LINQ2Entities ha il seguente aspetto:
context.MyTables.Where(m => m.SomeStringProp == stringVar);
Questa operazione richiede oltre 3000 millisecondi per l'esecuzione. L'SQL generato sembra molto semplice:
SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
...
FROM [MyTable] as [Extent1]
WHERE [Extent1].[SomeStringProp] = '1234567890'
Questa query viene eseguita quasi istantaneamente quando viene eseguita tramite Management Studio. Quando cambio il codice C # per utilizzare la funzione SqlQuery, viene eseguito in 5-10 millisecondi:
context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Quindi, esattamente lo stesso SQL, le entità risultanti vengono tracciate in entrambi i casi, ma una differenza di prestazioni selvaggia tra i due. Cosa succede?
Performance Considerations for Entity Framework 5