asp.net - 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 数据源的跟踪:
解决方案
如果平台行为异常并且由于应用服务基础设施而产生额外的延迟。如果问题现在正在发生,请通过转到诊断和解决刀片、诊断即服务并选择 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 支持。
每个慢请求的详细信息列出了调用堆栈和完整请求跟踪:
希望能帮助到你。
推荐阅读
- python - Python - 如果未传递所有参数并且不评估 elif 语句,则函数不会返回输出
- netsuite - 显示网络套件中采购订单的“项目”子列表的所有字段
- ignite - 重启 docker 容器时,Ignite 缓存数据丢失
- javascript - 使用相等 (===) 或不相等 (!==) 运算符是否更高效?
- android - 在需要的设备中以编程方式启用自动启动权限
- laravel - Laravel 复杂的地方和地点
- elasticsearch - Elasticsearch - 使字段可聚合但不可搜索
- sql-server - Weka 3.8 - SQL Server 连接
- java - 如何在 Beanshell 中使用或转义 java 8 Lambda 表达式
- android - Android - SMS Retriever API - 计算应用程序的哈希字符串问题