EF 4.0中看似无限的堆栈跟踪和负载下的查询性能差

Dhw*_*hah 14 c# asp.net linq-to-entities entity-framework-4

在大型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构建,并在运行负载测试时托管在Windows 7服务器上的IIS 7.5上.

分析报告显示一个似乎"无限"的调用堆栈,即一遍又一遍地对下面的行进行了大量调用.

System.Data.Mapping.DefaultObjectMappingItemCollection.LoadObjectMapping
    System.Data.Mapping.DefaultObjectMappingItemCollection.LoadAssociationTypeMapping
        System.Data.Mapping.DefaultObjectMappingItemCollection.LoadObjectMapping
            System.Data.Mapping.DefaultObjectMappingItemCollection.LoadAssociationTypeMapping
Run Code Online (Sandbox Code Playgroud)

可能导致性能不佳以及无限外观调用堆栈的原因是什么?

AVH*_*AVH 1

另一件值得尝试的事情是出色的 Entity Framework Profiler - 为我们在调试此类性能问题时省去了许多麻烦 - 为您提供了比 SQL Profiler 更多的功能,您可以看到每个 ObjectContext 和方法/源行等创建了哪些查询/对象- http://efprof.com/