【问题标题】:Declaring an object to return vs direct return statements C# [duplicate]声明要返回的对象与直接返回语句C# [重复]
【发布时间】:2016-06-22 03:18:29
【问题描述】:

嘿,我刚刚遇到一个函数,我不知道哪个更好?

private static bool IsEqual(TypeABC output, TypeABC input)
{
    if( conditions....)
    {
       return true;
    }

    return false;
}

private static bool IsEqual(TypeABC output, TypeABC input)
{
    bool isEqual = false;

    if( conditions....)
    {
       isEqual = true;
    }

    return isEqual;
}

两者都执行相同的操作,但

我想从任何角度了解编码标准、性能还是垃圾收集。以上哪一项更好,为什么?

或者如果它太笼统而无法回答,那么每个代码相对于另一个的优点/缺点。

还建议我应该为这个问题添加一些标签。

【问题讨论】:

  • “哪个更好” - 这不是解决此类问题的方法。列出这两种方法的优缺点,并确定您认为重要的优缺点。然后你可以选择哪一个对你“更好”。做更多研究的关键词:single entry, single exitfail fast,另见C# return variables
  • 我认为 single entry, single exit 是像 Pascal 这样的过程编程语言遗留下来的,在这种语言中,很难控制何时在函数/方法中返回结果。我在这里en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions 找到了一些 Pascal 函数,这很奇怪(IMO),因为没有 return 关键字来停止该函数。

标签: c# variables return


【解决方案1】:

性能或垃圾回收而言,这是一个极其无用的问题,因为您做出了一个巨大的假设,即 C# 编译器团队不只是将您的代码重新编译成以下 IL 版本:

private static bool IsEqual(TypeABC output, TypeABC input)
{
  return ( conditions....);
}

【讨论】:

  • Erik,您的代码是所有 3 种代码中优化得最好的一种,是的,我对如何在这两种代码中进行优化感到困惑,有什么地方可以看到代码的 IL 版本吗?
  • 没有意义。您尝试超级优化的时间几乎没有得到任何回报。作为开发人员,我们应该在 c# 中处理更大的问题。
  • 我明白你在说什么,但我仍然想在将代码留给编译器之前尽我所能优化我的代码,我不认为它没有意义,因为我不相信在不知道幕后发生的事情的情况下工作。无论如何,谢谢,因为我能够找到答案及其背后的原因
  • Compilers - What Every Programmer Should Know About Compiler Optimizations您应该考虑设计的各个方面,而不是手动优化代码,例如使用更快的算法、合并线程级并行性和使用特定于框架的功能(例如使用移动构造函数)。尽管如此,与花时间手动调整程序相比,使用编译器提供的特定功能并让编译器调整代码通常会更有成效。
  • .Net 4.5.1 运行时可以做一些非常疯狂的事情... 例如,在运行时,RyuJIT 可能能够确定 if 语句的条件在应用程序的这种特殊运行,因此可以对其进行优化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多