Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# lambda是内联的吗?_C#_Lambda_Inlining - Fatal编程技术网

C# lambda是内联的吗?

C# lambda是内联的吗?,c#,lambda,inlining,C#,Lambda,Inlining,简单的lambda表达式是否内联 我倾向于(多亏了F#和其他函数的尝试)将单个函数中的重复代码封装到lambda中,并调用它。我很好奇我是否因此产生了运行时开销: var foo = a + b; var bar = a + b; vs Func op=()=>a+b; var foo=op(); var bar=op(); 哪一个运行成本更高?否。Lambda函数不是内联的,而是作为代理存储在引擎盖下,执行成本与其他代理相同 回答性能问题:双向运行10亿次。衡量每个项目的成本。那你就知道了

简单的lambda表达式是否内联

我倾向于(多亏了F#和其他函数的尝试)将单个函数中的重复代码封装到lambda中,并调用它。我很好奇我是否因此产生了运行时开销:

var foo = a + b;
var bar = a + b;
vs

Func op=()=>a+b;
var foo=op();
var bar=op();

哪一个运行成本更高?

否。Lambda函数不是内联的,而是作为代理存储在引擎盖下,执行成本与其他代理相同

回答性能问题:双向运行10亿次。衡量每个项目的成本。那你就知道了。我们不知道你在用什么硬件,你的相关场景中有什么“噪音”,或者你认为是一个重要的性能指标。你是唯一知道这些事情的人,所以你是唯一能回答这个问题的人

回答您的codegen问题:Jared是正确的,但答案可以进一步扩展

首先,C#编译器从不内联任何代码。jit编译器确实进行代码内联,但C#编译器生成lambda作为委托实例这一事实意味着抖动不太可能合理地内联此代码。(抖动当然可以进行这种复杂的分析,以确定代理中始终存在相同的代码,但我不相信在实践中已经实现了这些算法。)

如果您希望代码内联,那么您应该将其写入第行。如果您不想将其写入行,但仍然希望将其内联,那么您应该将其作为静态方法写入,并希望抖动将其内联

但无论如何,这听起来像是过早的优化。按照您希望的方式编写代码,然后分析其性能,然后重写那些慢的东西

Func<T1, T2> op = () => a + b;
var foo = op();
var bar = op();