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 необходимо перейти из режима совместной работы в режим preemptive. Полные сведения об этих режимах можно найти по адресу 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 (например, любой тип ввода-вывода).
  • Встроенная функция не вызывает обратно в среду выполнения (например, обратный 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)

Применяется к