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

本文关键字:问题 用法 MethodImpl 属性 关于 | 更新日期: 2023-09-27 17:59:52

MethodImplOptions的MSDN参考如下:

MethodImplOptions枚举


首先,我想了解一下,在什么情况下我应该使用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

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

下面是一个用户测试,它演示了内联会导致糟糕的性能:

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

然而,我不确定是否应该指定内联,是否应该设置NoOptimization,或者在共享方法的情况下,什么值可以获得最佳性能。

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

MSDN:

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

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

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