【问题标题】:What is the performance improvement process for .NET applications?.NET 应用程序的性能改进过程是什么?
【发布时间】:2022-01-12 12:35:43
【问题描述】:

我有一个报告了性能问题的 .NET 应用程序。我之前关于如何提高性能的问题已关闭。 cmets 告诉我,我没有正确地进行性能测量,也没有遵循性能改进过程。

那么,这个过程是什么?如何正确执行 .NET 的性能测试?

【问题讨论】:

标签: .net performance performance-testing


【解决方案1】:

那么,这个过程是什么?如何正确执行 .NET 的性能测试?

第一步:阅读@Eric Lippert的性能文章

  • Benchmarking mistakes, part 1这是关于

    • 错误 #1:选择错误的指标
    • 错误 #2:过度关注子系统性能而牺牲端到端性能
    • 错误 #3:在调试器中运行基准测试
    • 错误 #4:对调试版本而不是发布版本进行基准测试
  • Benchmarking mistakes, part 2

    • 错误 #5:使用时钟而不是秒表
  • Benchmarking mistakes, part 3

    • 错误 #6:在衡量平均性能时将第一次运行视为没什么特别的
    • 错误 #7:假设一个环境中的运行时特征告诉您在不同环境中会出现什么行为
  • Benchmarking mistakes, part 4

    • 错误 #8:忘记考虑垃圾收集效果。

第 2 步理解 Eric Lippert 的表演文章。再次阅读它们,并弄清楚您将如何将这些概念准确地应用于您的程序、IDE 等。您如何在发布模式下编译?没有调试器如何运行?您如何实施时间测量?

第 3 步:制作清单以确保您遵循所有建议

第 4 步:获取您的性能性能要求。它到底需要多快?以绝对值表示,在哪个硬件上?

可以使用您的机器作为参考。但我们需要知道是什么机器才能了解它具有哪些功能(例如 CPU、缓存级别、涡轮增压是否启用、超线程是否启用)。

第 5 步:配置您的应用程序。使用适当的工具。

许多公司都将 JetBrains dotTrace 作为 Resharper Ultimate 的一部分。

第 6 步:分析结果。热点和瓶颈在哪里?你是怎么找到他们的?他们是由工具建议的吗?如果有,是哪一个?

第 7 步:考虑可能的优化

将多线程引入到以前的顺序问题可能会给您带来 8 倍的性能。更好的算法可以轻松为您带来 20 倍的性能(非多线程)。在这一步中认真思考。

第 8 步:预测不同的选项。您期望每个选项的性能提升多少?

如果所有选项都没有达到所需的性能,您甚至可能不想开始接触代码。

第 9 步:设置版本控制,因为您需要它。

请参见第 13 步。您必须能够回滚。您可能会弄错多线程并进行数据竞争。您的优化结果可能比以前更糟。您必须能够回滚到干净状态。

第 10 步:实施(下一个)最有希望的选项

第 11 步:验证结果,即再次配置文件(在同一台机器上,相同的设置,...)

第 12 步:将新结果与初始结果进行比较。

第 13 步:如果更改好则保留更改,否则回滚。

第 14 步:如果达到性能目标:停止。如果不是,请返回第 7 步或第 8 步并实施其他选项之一。

停止意味着:不再执行。您已达到要求。不要通过优化更多来浪费您的时间。 “过早的优化是万恶之源”[Donald Knuth]

我之前关于如何提高性能的问题已结束。

在 Stack Overflow 上询问性能问题时:

  • 提供证据证明您具备基本知识。
  • 提供证据证明您遵守了规则(例如发布版本,...)。
  • 提供您正在优化的指标。
  • 提供您的硬件详细信息。
  • 请勿发布数百行代码的链接。将受影响的代码减少到最低限度。
  • BenchmarkDotNet 中运行最小化的代码,因为
    • 开箱即用,它做了很多正确的事情(例如平均)
    • 它是免费的,因此每个人都可以使用它来验证您的结果
  • 提供数字 - 步骤 4、5 和 11 中的所有数字 (!)。

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 2012-06-17
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多