有没有办法在c#中实现函数内联?
据我所知,没有办法提示c#编译器内联一个特定的函数,我猜设计就是这样 我还认为,不让程序员指定内联和非内联通常是一个好主意,因为这意味着您认为自己比JIT编译器更聪明(我向那些真正聪明的人表示敬意),但是,如果我想指定代码的关键部分需要以任何代价都非常快,该怎么办,无论如何在目标机器上实现它?到目前为止,你还不能做这样的事情,我想知道c语言和JIT是否都会支持这个特性 在我的例子中,我知道目标机器是什么,并且我知道函数内联将有助于提高性能。这让我想到,实施函数内联的唯一方法是了解JIT在什么情况下会这样做,但我认为这也不是一个好主意 对这个问题的任何解释都将不胜感激 谢谢。简短回答:不 长答覆: 内联的标准:和有没有办法在c#中实现函数内联?,c#,optimization,call,overhead,inlining,C#,Optimization,Call,Overhead,Inlining,据我所知,没有办法提示c#编译器内联一个特定的函数,我猜设计就是这样 我还认为,不让程序员指定内联和非内联通常是一个好主意,因为这意味着您认为自己比JIT编译器更聪明(我向那些真正聪明的人表示敬意),但是,如果我想指定代码的关键部分需要以任何代价都非常快,该怎么办,无论如何在目标机器上实现它?到目前为止,你还不能做这样的事情,我想知道c语言和JIT是否都会支持这个特性 在我的例子中,我知道目标机器是什么,并且我知道函数内联将有助于提高性能。这让我想到,实施函数内联的唯一方法是了解JIT在什么情况
注意,在最后两个关于内联标准的链接中,关于结构不是内联的链接已经过时;更新信息见:我最近对此进行了基准测试: (越高越好) 可以看出,CLR和JVM在方法内联方面都比以往任何时候都要好。
if(性能<可接受){
if(profiler.showsaffectofmethodcallheader()&&seriouslyWeDoubleChecked()){
if(runtimeContext.isreallystable和notpronetochange()&&WENEEDTOGETTHISTHINGBATOOFHELLFAST()){
如果某个外部函数可能有价值,则返回此Isoneofthefefthefest();
}
}
}
return dontWorryAboutIt();
如果您正在执行这种罕见的路径,请中断您的C或ASM 随着.NET4.5的出现,情况发生了一些变化 现在,您可以使用属性装饰一个方法,如果可能的话,该属性将使它由JIT内联 有关更多详细信息,请参阅
if(performance < ACCEPTABLE){
if(profiler.showsAffectOfMethodCallOverhead() && seriouslyWeDoubleChecked()){
if(runtimeContext.isReallyStableAndNotProneToChange() && weNeedToGetThisThingBatOutOfHellFast()){
return thisIsOneOfTheFewTimesWhenANativeExternalFunctionMayBeWorthIt();
}
}
}
return dontWorryAboutIt();