SuppressGCTransitionAttribute 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
指示在调用非托管函数时应跳过垃圾回收转换。
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
- 继承
- 属性
注解
如果应用于没有 的方法, 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) 。
- 本机函数不会调用回运行时 (例如 Reverse 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) |