什么是内联?

它是干什么用的?

你能在 C# 中内联一些东西吗?

有帮助吗?

解决方案

<强>它是什么

在C和C的使用++ inline关键字告诉编译器调用一个例程不用按参数压入堆栈的开销的条款。该函数,而不是具有插入到它被调用的函数它的机器代码。这可以创建在某些情况下的性能显著增加。

<强>危险

在使用“内联”减少显著为一体的内联函数的大小增加的速度的好处。过度使用实际上可能导致程序运行速度变慢。内联一个非常小的存取函数通常会减少代码大小,而内联一个非常大的功能,可以显着地增加代码的大小。

<强>内联在C#

在C#内联发生在JIT水平,其中所述JIT编译器做出决定。目前在C#中没有一个机制,你可以明确地做到这一点。如果你想知道什么是JIT编译器在做,那么你可以拨打:System.Reflection.MethodBase.GetCurrentMethod().Name在运行时。如果方法是内联的,将返回调用者的名称,而不是

在C#你不能强迫内联的方法,但可以强制不方法。如果你确实需要访问特定的调用堆栈,你需要删除内联,您可以使用:MethodImplAttributeMethodImplOptions.NoInlining。此外,如果一个方法声明为虚拟那么它也不会被JIT内联。这背后的原因是该呼叫的最终目标是未知的。

更多关于内联

其他提示

有关的定义和内联的讨论,看到这个问题

在C#中,你不需要指示编译或运行时内联,因为运行时会自动执行。

P.S。这个答案也是Java的正确。

内联是指不调用特定函数,而是直接在调用站点完成函数内容。这样做的主要原因是,它通过在调用站点运行函数内容来消除调用函数的开销。

它被用作一种优化技术。就 C# 而言,它实际上依赖于 CLR JIT 引擎来完成工作。在运行时,编译方法时,JIT 引擎将使用启发式方法来确定内联函数是否合适以及是否会进行有效的优化。如果是,则执行内联。

Vance 有一篇关于 JIT 在内联时考虑的内容的精彩文章: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to-inline-that-is-the-question.aspx

C# 中无法强制内联。该语言不支持这种构造。主要是因为人们对于应该优化什么的判断力很差。JITer 是一个更好的判断者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top