Это меня смущает.
Я использую EF 4.1 и применил шаблон T4 к модели для использования прокси POCO и POCO (общедоступный ctor без параметров, все свойства виртуальные, все свойства навигации - ICollection).
У меня есть таблица с 1,1M записями. Я проводил некоторые временные тесты, чтобы выяснить, сколько времени потребуется, чтобы получить эти данные и получить неожиданные результаты.
Этот вызов возвращается примерно через 21 секунду:
ctx.Valuations.MergeOption = MergeOption.NoTracking
var entityValuations = ctx.Valuations.OfType<Foo>().ToArray();
Этот вызов занимает 9 секунд:
ctx.Valuations.MergeOption = MergeOption.NoTracking
var entityValuations = ctx.Valuations.OfType<Foo>().Select(v => new Val()
{
ID = v.ID
...
//set all properties
....
}).ToArray();
Единственное различие между этими двумя утверждениями состоит в том, что первый возвращает прокси-серверы EF, а второй проецирует набор результатов в не-прокси-сервер. Вот такая огромная разница во времени исполнения! Я совершенно озадачен тем, почему, и не могу придумать какой-либо законной причины.
Кто-нибудь знает, почему второе утверждение намного быстрее?