在大型 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
导致性能不佳和看起来无限的调用堆栈的原因可能是什么?
最佳答案
另一件值得尝试的事情是优秀的 Entity Framework Profiler - 它让我们在调试此类性能问题时省去了很多麻烦 - 比 SQL Profiler 给了你更多的东西,你可以看到每个 ObjectContext 和方法/源创建了哪些查询/对象线等 - http://efprof.com/
关于c# - EF 4.0 中看似无限的堆栈跟踪和负载下的查询性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6978207/