SuppressGCTransitionAttribute 类

定义

指示在进行非托管函数调用时应跳过垃圾回收转换。

public ref class SuppressGCTransitionAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)]
public sealed class SuppressGCTransitionAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, Inherited=false)>]
type SuppressGCTransitionAttribute = class
    inherit Attribute
Public NotInheritable Class SuppressGCTransitionAttribute
Inherits Attribute
继承
SuppressGCTransitionAttribute
属性

注解

如果应用于没有 的方法, DllImportAttribute则忽略此属性。

当转换的成本超过非托管函数的执行时间时,放弃此转换可能会带来好处。 但是,避免这种转换会消除运行时通过正常 P/Invoke 提供的一些保证。 退出托管运行时进入非托管函数时,GC 必须从协作模式转换为抢占模式。 有关这些模式的完整详细信息, https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8请参阅 。 取消 GC 转换是一种高级方案,在完全了解潜在后果的情况下,不应这样做。

其中一个后果是影响 混合模式调试。 在混合模式调试期间,无法在已使用此属性标记的 P/Invoke 中单步执行或设置断点。 解决方法是切换到本机调试并在本机函数中设置断点。 通常,如果调试 P/Invoke 很重要(例如,单步执行本机代码或诊断从本机代码引发的异常),则不建议使用此属性。

此属性应用于的 P/Invoke 方法必须具有以下所有属性:

  • 本机函数始终执行少量时间, (小于 1 微秒) 。
  • 本机函数不执行阻止 syscall (例如,任何类型的 I/O) 。
  • 本机函数不会调用回运行时 (例如反向 P/Invoke) 。
  • 本机函数不会引发异常。
  • 本机函数不会操作锁或其他并发基元。

无效使用此属性的后果包括:

  • GC 饥饿。
  • 立即终止运行时。
  • 数据损坏。

应用此属性可能会导致早期绑定 P/Invoke 导出,作为 JIT 编译的调用方法的副作用。 EntryPointNotFoundException 或引发其他异常的时间可能早于未应用 属性时。

构造函数

SuppressGCTransitionAttribute()

实例构造函数。

属性

TypeId

在派生类中实现时,获取此 Attribute 的唯一标识符。

(继承自 Attribute)

方法

Equals(Object)

返回一个值,该值指示此实例是否与指定的对象相等。

(继承自 Attribute)
GetHashCode()

返回此实例的哈希代码。

(继承自 Attribute)
GetType()

获取当前实例的 Type

(继承自 Object)
IsDefaultAttribute()

在派生类中重写时,指示此实例的值是否是派生类的默认值。

(继承自 Attribute)
Match(Object)

当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。

(继承自 Attribute)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于