c# - 不获取返回值和获取并丢弃返回值在性能上有区别吗?

标签 c#

<分区>

给定初始代码:

  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 个不同 block 的最初原因是,做后者可能容易出错,因为现在有 2 个调用站点需要维护,而上面的版本只保留 1 个调用站点需要维护。

最佳答案

是否将返回值分配给变量没有区别。 至少对于 Release 构建,编译器会注意到您没有在其他任何地方使用 result 并将对其进行优化。

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

关于c# - 不获取返回值和获取并丢弃返回值在性能上有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57134287/

相关文章:

c# - 如何在 ASP.NET Core 2.2 项目中为子域正确启用 CORS?

c# - 部分读取从 c# 应用程序创建的另一个进程的标准输出

c# - CodeDomProvider.CreateCompiler() 已过时

c# - 序列化不带引号的属性值

c# - 如何防止覆盖 WinForm 控件中的 "default"值?

c# - 有人可以解释这种通用语法吗?

c# - 如何在 ViewModel 中公开模型的集合

c# - Crystal 报表。使用 MVC 的 Windows Server 2008 中的 "cannot find the path specified"

c# - Mongodb C# 驱动程序在映射复杂类时抛出异常

c# - 如何知道我的 DirectoryEntry 是否真的连接到我的 LDAP 目录?