首页 > 解决方案 > asp.net实体数据源性能问题

问题描述

简单的测试页面通过实体数据源加载小数据集大约需要 4 秒。使用 SQL 数据源克隆页面加载相同数据需要 70 毫秒。

在访问 Azure DB EF 和 SQL 的本地服务器上运行甚至在性能上。运行 SQL 探查器,SQL 几乎相同且速度快(约 20 毫秒)。

Azure 托管 asp.net web 应用程序,目标是 .Net 4.7.2 和 EF6。项目中使用相同数据模型的其他页面也存在类似的性能问题。我在类似的项目中使用过 EF6 没有问题。

  <div>
    <asp:GridView ID="GridView1" runat="server" DataSourceID="edsLists"></asp:GridView>
  </div>

  <asp:EntityDataSource ID="edsLists" runat="server" 
      ConnectionString="name=DatabaseEntities" 
      DefaultContainerName="DatabaseEntities" EnableFlattening="False" 
      EntitySetName="Lists" AutoGenerateWhereClause="True" Where=""  
      Include="">
  </asp:EntityDataSource>


    <div>
      <asp:GridView ID="GridView1" runat="server" DataSourceID="edsLists"></asp:GridView>
    </div>

  <asp:SqlDataSource ID="edsLists" runat="server" ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" SelectCommand="SELECT * FROM [Lists]">
  </asp:SqlDataSource>

更新: 这是跟踪的输出: 在此处输入图像描述

在此处输入图像描述

这是同一页面使用 SQL 数据源的跟踪:

在此处输入图像描述

性能 EF6(test1)/SQL(test2): 在此处输入图像描述

标签: asp.netentity-frameworkazureazure-sql-database

解决方案


如果平台行为异常并且由于应用服务基础设施而产生额外的延迟。如果问题现在正在发生,请通过转到诊断和解决刀片、诊断即服务并选择 CLR Profiler 来识别慢速来收集分析器跟踪。

推荐

  • 为您的 Web 应用启用或检查 Application Insights。
  • 获取进程的内存转储
  • 运行远程探查器

另外,我建议您运行实体框架的 NHibernate 配置文件以查看任何 N+1 问题,如果它在运行前修复它。

如果您有任何问题或疑虑,请告诉我。

为了给您一个要点,这是我们对其进行故障排除所遵循的过程。虽然它与 dot net core 有关,但您可以在 azure web 应用程序中找到它类似于 asp.net:

  • 转到诊断和解决问题刀片 --> 诊断工具。如果检测到堆栈是“ASP.NET Core”,工具将如下列出。如果没有,您可以选择右侧的选项。

  • 现在“收集 .NET Profiler Trace”已列在 ASP.NET Core 堆栈中。

  • 单击“收集 .NET Profiler”。它需要一些代码级别的更改才能让 .NET Core 应用程序发出 ETW 事件。收集 ASP.NET Core Profiler Trace 的需求消息如下所示。确保 Web 应用程序符合要求。

  • 有两种数据收集模式:收集和分析数据和仅收集数据。“仅收集数据”不会生成分析报告。

- 如果您选择“仅收集数据”</h1>

单击“收集探查器跟踪”按钮以开始收集,就像对普通 .NET 应用程序一样。

  • 数据收集完成后,您可以单击链接下载 .zip 文件(diagsession)并通过 perfview 在本地进行分析。

当前的“收集 .NET Profiler Trace”选项卡中列出了最后 5 个分析会话。

  • 单击“此处”跳转到“诊断工具”选项卡以查看所有会话。从那里您可以下载数据和报告。每个会话中都有磁盘空间使用信息。根据此信息,您可以删除一些会话以释放磁盘空间。

- 如果您选择“收集和分析数据”</h1>

您不仅可以下载 zip 文件,还可以打开分析报告。Profiler Trace Analyzer 中提供了 .NET Core 支持。

  • Profiler 跟踪分析器慢请求中的 .NET Core 支持 在此处输入图像描述

    Profiler 跟踪报告中的“.NET Core 慢请求”选项卡。它显示了此跟踪中最慢的 ASP.NET Core 请求。

每个慢请求的详细信息列出了调用堆栈和完整请求跟踪:

在此处输入图像描述

希望能帮助到你。


推荐阅读