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) |