关于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,或者在共享方法的情况下,什么值可以获得最佳性能。
MSDN:
Unmanaged该方法是在非托管代码中实现的。
这意味着方法体位于非托管代码中,而不是将被编译到它。此标志用于C++/CLI程序集中。
我想说不要使用这个属性,JIT应该在需要时自行处理内联(正如您发布的文章中所写的那样)。