关于MethodImpl属性的使用的一些问题

时间:2015-06-25 22:31:40

标签: c# .net vb.net jit cil

MethodImplOptions的MSDN参考是:

MethodImplOptions Enumeration

首先,我想了解一下我应该使用哪种情况MethodImpl(MethodImplOptions.Unmanaged)以及最重要的事情,这有什么好处(如果有的话)?

我认为我应该在调用WinAPI函数或第三方C / C ++库中的函数时使用它,那么,这个代码示例是对的吗?:

<MethodImpl(MethodImplOptions.Unmanaged)>
Public Shared Sub MyMethod()

    ' Call to
    SafeOrUnsafeNativeMethodsClass.RanodmWinAPIFunction()

End Sub

其次,我想了解我应该对在类中声明为共享的方法应该使用什么值,这些方法可以从代码的任何部分调用。

一个例子:

' Sealed class.
Public NotInheritable Class class1

    ' No instanceable class.    
    Private Sub New()
    End Sub

    Public Shared Function MyFunc(ByVal parameter1 As String) As Boolean

        Return A Boolean Value

    End Function

End Class

MethodImplOptions属性中,MethodImpl EnumerationI应为该方法设置什么值?

这是一个用户测试,演示内联导致性能不佳:

https://softwareengineering.stackexchange.com/questions/245802/is-there-a-downside-to-using-aggressiveinlining-on-simple-properties

然而,我不确定内联是否应该指明,我是否应该设置NoOptimization,或者在共享方法的环境中取得最佳性能的价值。

1 个答案:

答案 0 :(得分:2)

MSDN

  

Unmanaged该方法在非托管代码中实现。

这意味着方法体是非托管代码,而不是它将被编译到它。此标志用于C ++ / CLI程序集。

我说不要使用此属性,JIT应该在需要时自行处理内联(正如您发布的文章中所述)。