为了账号安全,请及时绑定邮箱和手机立即绑定

C#中的内联函数?

C#中的内联函数?

C#
素胚勾勒不出你 2019-07-23 19:28:47
C#中的内联函数?你如何在C#中做“内联函数”?我认为我不理解这个概念。他们喜欢匿名方法吗?像lambda函数?注意:答案几乎完全涉及内联函数的能力,即“用被调用者的主体替换函数调用站点的手动或编译器优化”。如果您对匿名(也称为lambda)函数感兴趣,请参阅@ jalf的答案或者每个人都在说什么'Lambda'?。
查看完整描述

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

最后在.NET 4.5中,CLR允许使用值提示/建议1方法内联MethodImplOptions.AggressiveInlining。它也可以在Mono的后备箱中使用(今天提交)。


// The full attribute usage is in mscorlib.dll,

// so should not need to include extra references

using System.Runtime.CompilerServices; 


...


[MethodImpl(MethodImplOptions.AggressiveInlining)]

void MyMethod(...)

1。此前使用的是“force”。由于有一些downvotes,我会试着澄清这个词。正如在评论和文档中一样,The method should be inlined if possible.特别是考虑到Mono(开放),考虑内联或更一般的(如虚函数),存在一些单特定的技术限制。总的来说,是的,这是对编译器的暗示,但我想这就是要求的。


查看完整回答
反对 回复 2019-07-23
?
函数式编程

TA贡献1807条经验 获得超9个赞

内联方法只是一种编译器优化,其中函数的代码被卷入调用者。

在C#中没有任何机制可以做到这一点,并且它们在支持它们的语言中被谨慎使用 - 如果你不知道为什么它们应该被用在某个地方,它们就不应该被使用。

编辑:为了澄清,有两个主要原因需要谨慎使用:

  1. 在没有必要的情况下,通过内联使用大量二进制文件很容易

  2. 从性能的角度来看,编译器往往比你应该知道更好

最好不要管它,让编译器完成它的工作,然后分析并确定内联是否是最适合你的解决方案。当然,有些事情是有意义的内联(特别是数学运算符),但让编译器处理它通常是最好的做法。


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 1647 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信