首页 > 解决方案 > 不获取返回值与获取和丢弃它在性能上是否存在差异?

问题描述

给定初始代码:

  callSomeFunction(someParameter);

目前,该函数返回但未使用该值。但是,我们需要提供跟踪日志,因此我们将代码修改为:

#if DEBUG
    Debug.Print $"Entering function with {nameof(someParameter)}: {someParameter}";
#endif
   var result = callSomeFunction(someParameter);
#if DEBUG
   Debug.Print $"Leaving function with result: {result}";
#endif

在发布版本中,代码基本上等同于:

   var result = callSomeFunction(someParameter);

显然result没有使用。那么随着这些变化,是否有任何性能影响只是因为它现在正在获取一个返回值,而它最初不是?不只是制作 2 个不同块的最初原因是,这样做可能容易出错,因为现在有 2 个呼叫站点需要维护,而上面的版本只保留 1 个呼叫站点需要维护。

标签: c#

解决方案


是否将返回值分配给变量没有区别。至少在发布版本中,编译器会注意到您不会result在其他任何地方使用并将其优化掉。

即使在 Debug 构建中,至少不会发生内存分配(因此不会发生 GC),因为result将在堆栈上分配,因为它是一个局部变量。


推荐阅读