.NET 性能最佳做法:优化数据访问和I/O

与数据存储和其他远程服务的交互通常是 ASP.NET Core 应用的最慢部分。高效读取和写入数据对于良好的性能至关重要。

建议:

  • 请异步调用所有数据访问 API。

  • 请勿检索不需要的数据。编写查询以便仅返回当前 HTTP 请求所需的数据。.

  • 如果可接受稍微过时的数据,请考虑缓存从数据库或远程服务检索的经常访问的数据。根据方案使用 MemoryCache 或 DistributedCache。有关详细信息,请参阅 ASP.NET Core 中的响应缓存。

  • 请尽量缩短网络往返。目标是在单个调用而不是多个调用中检索所需数据。

  • 当出于只读目的访问数据时,请在Entity Framework Core中使用无跟踪查询。EF Core可以更有效地返回无跟踪查询的结果。

  • 请筛选和聚合 LINQ 查询(例如使用 、.Select 或 .Sum 语句),以便数据库执行筛选。

  • 请考虑 EF Core 会在客户端上解析一些查询运算符,这可能会导致查询执行效率低下。有关详细信息,请参阅客户端评估性能问题。

  • 请勿对集合使用投影查询,这可能会导致执行“N + 1”个 SQL 查询。有关详细信息,请参阅相关子查询优化。

请参阅 EF 高性能,以了解可提高大规模应用性能的方法:

  • DbContext 池

  • 显式编译的查询

建议在提交基本代码之前衡量前面高性能方法的影响。已编译查询的额外复杂性可能无法证明性能改进的合理性。

通过使用 Application Insights 或分析工具查看访问数据所用的时间,可以检测到查询问题。大多数数据库还提供有关频繁执行的查询的统计信息。