c# - EF 4.0 中看似无限的堆栈跟踪和负载下的查询性能不佳

标签 c# asp.net entity-framework-4 linq-to-entities

在大型 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/

相关文章:

asp.net - 动态数据 - 创建友好的列名称?

c# - Windows Phone 8.1 MVVM设置 View 的 View 模型

c# - *(decimal*)d=XXXm 产生不同于 BinaryWriter.Write(XXXm) 的另一个输出

用于搜索术语文本的 C# 代码/算法

c# - 尝试在 IIS 和 ASP.NET 中达到 100% 的 CPU 使用率

asp.net - 压力测试 ASP.Net 应用程序

c# - 如何重置 C# 中的标识列?

c# - 无法加载文件或程序集“Microsoft.IdentityModel.Protocols.WsFederation,

c# - asp.net 中的 Response.Write()

performance - Entity Framework SaveChanges() 第一次调用非常慢