По-видимому, бесконечная трассировка стека в EF 4.0 и низкая производительность запросов при загрузке

На большой модели EF 4.0 (700 + сущностей) мы получаем низкую производительность на System.Data.Objects.ObjectContext.CreateObjectSet(string). Вызов этого вызван запросом типа context.Users.FirstOrDefault(u => u.userId = 100).

Запрос выполняется хорошо в общем, но при загрузке запрос не работает. Мы используем 20 одновременных пользовательских нагрузок на странице, использующей этот запрос. Приложение для этой страницы находится в режиме профилирования, то есть мы используем профилировщик производительности Visual Studio 2010 во время выполнения этого теста малой нагрузки. Профилировщик использует режим "Сэмплирование".

Приложение построено с помощью ASP.NET 4.0/ASP.NET MVC 3.0 и размещено на сервере IIS 7.5 на сервере Windows 7, когда выполняется проверка нагрузки.

Отчет о профилировании показывает стек вызовов, который кажется "бесконечным", то есть много вызовов на следующие строки снова и снова.

System.Data.Mapping.DefaultObjectMappingItemCollection.LoadObjectMapping
    System.Data.Mapping.DefaultObjectMappingItemCollection.LoadAssociationTypeMapping
        System.Data.Mapping.DefaultObjectMappingItemCollection.LoadObjectMapping
            System.Data.Mapping.DefaultObjectMappingItemCollection.LoadAssociationTypeMapping

Что может быть причиной низкой производительности и таких бесконечно выглядящих стеков вызовов?

Ответ 1

Еще одна вещь, которую стоит попробовать - это отличная платформа Entity Framework Profiler - избавила нас от многих головных болей в таких проблемах отладки, как это - дает вам гораздо больше, чем SQL Profiler, и вы можете видеть, какие запросы/объекты создаются для ObjectContext и метода/источника line и т.д. http://efprof.com/