【问题标题】:How to tell if code cannot be optimized any further如何判断代码是否无法进一步优化
【发布时间】:2014-07-19 16:59:41
【问题描述】:

我编写了一个函数来计算 C# 中使用嵌套 for 循环的公式。它的运行速度比我想要的要慢,我一直在努力加快速度。有没有一种好方法可以确定我的代码是否可以在 C# 中进一步优化,或者我是否需要迁移到机器编译的语言,例如 C++?

我知道每种情况都会有所不同,但是否有通用流程/清单可用于确定是否可以进行更多优化?

【问题讨论】:

  • 感谢 JITter,原始计算在 C++ 中不太可能更快。 (除非您是非常熟练的 C++ 开发人员)
  • 您还记得为发布而不是调试而构建吗?除此之外,我唯一的建议是在调试器下运行程序,该调试器将显示实际的机器指令(而不是 .NET 中间语言),看看是否可以看到任何明显的低效率。如果没有,那么您无能为力。 (这里假设你对机器指令有一点了解)
  • @RenniePet 是的,我使用了发布选项,在我的情况下它并不比调试选项快(我觉得很奇怪)。我在学校上过关于机器指令的课程,但我认为我没有足够的知识来进行这种类型的分析以产生有用的结果。
  • @slaks (真的吗?)[benchmarksgame.alioth.debian.org/] -- 一般来说,当苹果与苹果在相当原始的计算问题上进行比较时,jitted 语言的速度要慢得多。
  • @Yakk 括号,然后是括号。你知道这个:p

标签: c# c++ performance optimization


【解决方案1】:

不,没有适用于任何算法的一般规则说“此算法无法进一步优化”。如果存在这样的工具,那么它将适用于任何现有的程序。

但是,分析器可以向您显示代码中应该优化的热点:在程序中显示效率低下的时间敏感部分运行分析器通常是个好主意。

使用.NET native 编译可以得到更接近等效 C++ 程序的预期结果。

【讨论】:

    猜你喜欢
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多