Поделиться через


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. При выходе из управляемой среды выполнения для входа в неуправляемую функцию сборка мусора должна перейти из режима совместной работы в режим вытеснения. Полные сведения об этих режимах можно найти по адресу https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/clr-code-guide.md#2.1.8. Подавление перехода сборки мусора является сложным сценарием, и его не следует делать без полного понимания потенциальных последствий.

Одним из этих последствий является влияние на отладку в смешанном режиме. Во время отладки в смешанном режиме невозможно выполнить шаг или задать точки останова в P/Invoke, помеченном этим атрибутом. Обходной путь — переключиться на собственную отладку и задать точку останова в собственной функции. Как правило, использовать этот атрибут не рекомендуется, если важна отладка P/Invoke, например пошаговое выполнение машинного кода или диагностика исключения, вызванного машинным кодом.

Метод P/Invoke, к которому применяется этот атрибут, должен иметь все следующие свойства:

  • Собственная функция всегда выполняется в течение тривиального периода времени (менее 1 микросекунды).
  • Собственная функция не выполняет блокирующий системный вызов (например, любой тип ввода-вывода).
  • Собственная функция не вызывает обратно в среду выполнения (например, обратный P/Invoke).
  • Собственная функция не создает исключений.
  • Собственная функция не управляет блокировками или другими примитивами параллелизма.

К последствиям недопустимого использования этого атрибута относятся:

  • Голодание мусора.
  • Немедленное завершение среды выполнения.
  • Повреждение данных.

Применение этого атрибута может привести к тому, что экспорт 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)

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