【问题标题】:Some questions about the usage of MethodImpl Attribute关于 MethodImpl 属性使用的一些问题
【发布时间】:2015-09-12 17:50:15
【问题描述】:

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 EnumerationI 应该在MethodImpl 属性中为该方法设置什么值?

这是一个用户测试,证明内联会导致性能不佳:

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

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

【问题讨论】:

  • 您在该问题中哪里看到“表现不佳”?

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


【解决方案1】:

MSDN:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2018-05-24
    • 2013-07-07
    相关资源
    最近更新 更多