给出初始代码:
callSomeFunction(someParameter);
Run Code Online (Sandbox Code Playgroud)
当前,该函数返回,但未使用该值。但是,我们需要提供跟踪日志,因此我们将代码修改为:
#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
Run Code Online (Sandbox Code Playgroud)
在发行版本中,代码基本上等效于:
var result = callSomeFunction(someParameter);
Run Code Online (Sandbox Code Playgroud)
并且显然result不使用。因此,有了这些更改,是否会因为它原来不是原本正在使用返回值的情况而对性能产生任何影响?最初不仅仅制作2个不同块的原因是,进行后者可能容易出错,因为现在要维护2个呼叫站点,而上述版本仅维护1个呼叫站点。
就以我对.NET的有限了解来分析一下,由于缺乏上下文,有两种情况result:值类型和引用类型result,但这两种情况都是已经创建的值callSomeFunction,成本只是接收和清理部分:
value type:这只是堆栈上的一些字节
reference type:已在托管堆上callSomeFunction分配的内存
callSomeFunction的引用所以,从我的角度来看,这没什么大不了的,我认为你的程序对性能并不那么重要——在这种情况下,你会选择一些更擅长的语言。