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 个不同块的最初原因是,这样做可能容易出错,因为现在有 2 个呼叫站点需要维护,而上面的版本只保留 1 个呼叫站点需要维护。
解决方案
是否将返回值分配给变量没有区别。至少在发布版本中,编译器会注意到您不会result
在其他任何地方使用并将其优化掉。
即使在 Debug 构建中,至少不会发生内存分配(因此不会发生 GC),因为result
将在堆栈上分配,因为它是一个局部变量。
推荐阅读
- c# - MySql 字符编码问题——货币符号(¤)
- php - 使用 MOVE_TO_FILE 将文件输入插入 BD
- javascript - 使用 document.execCommand("copy") 复制电子邮件地址
- amazon-web-services - boto3 s3 generate_presigned_url ExpiresIn 无法按预期工作
- solr - SOLR 邻近搜索提升不同斜率
- nginx - 使用命令“nginx”、“service start nginx”和“systemctl nginx start”启动 nginx 有什么区别?
- java - 在检索自定义 SOAP 标头时,使用 SOAPMessage.getSOAPHeader() 将 Soap 标头获取为 null
- xml - QString密码加密
- python-3.x - 这个语法错误是什么意思。我的代码写得很好。问题是什么?
- ruby-on-rails - 附加现有订单 (order.email) 以创建帐户,Devise?