MethodImplOptions Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает константы, определяющие сведения о реализации метода.
Это перечисление поддерживает побитовую комбинацию значений его членов.
public enum class MethodImplOptions
[System.Flags]
public enum MethodImplOptions
[System.Flags]
[System.Serializable]
public enum MethodImplOptions
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum MethodImplOptions
[<System.Flags>]
type MethodImplOptions =
[<System.Flags>]
[<System.Serializable>]
type MethodImplOptions =
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MethodImplOptions =
Public Enum MethodImplOptions
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| Unmanaged | 4 | Метод реализуется в неуправляемом коде. |
| NoInlining | 8 | Метод нельзя встраить. Встраивание — это оптимизация, с помощью которой вызов метода заменяется текстом метода. |
| ForwardRef | 16 | Метод объявлен, но его реализация предоставляется в другом месте. |
| Synchronized | 32 | Метод может выполняться только одним потоком за раз. Статические методы блокируют тип, а методы экземпляра блокируются на экземпляре. Только один поток может выполняться в любой из функций экземпляра, и только один поток может выполняться в любой из статических функций класса. |
| NoOptimization | 64 | Метод не оптимизирован компилятором JIT или машинным кодом (см. Ngen.exe) при отладке возможных проблем создания кода. |
| PreserveSig | 128 | Подпись метода экспортируется точно так же, как объявлена. |
| AggressiveInlining | 256 | Если это возможно, метод должен быть вложен. Необязательное использование этого атрибута может снизить производительность. Атрибут может привести к обнаружению ограничений реализации, что приведет к замедлению создания кода. Всегда измеряйте производительность, чтобы обеспечить применение этого атрибута. |
| AggressiveOptimization | 512 | Метод содержит код, который всегда должен быть оптимизирован для производительности. Это редко подходит для использования этого атрибута. Методы, применяемые к этому атрибуту, обходят первый уровень многоуровневой компиляции и поэтому не используют оптимизации, основанные на многоуровневой компиляции . Эти оптимизации включают динамические PGO и оптимизации на основе инициализированных классов. Использование этого атрибута также может увеличить использование памяти. Всегда измеряйте производительность, чтобы обеспечить применение этого атрибута. |
| SecurityMitigations | 1024 | Этот элемент зарезервирован для дальнейшего использования. Она появилась в .NET Framework 4.8. |
| InternalCall | 4096 | Вызов является внутренним, то есть вызывает метод, реализованный в среде CLR. |
| Async | 8192 |
Комментарии
Это перечисление используется с атрибутом MethodImplAttribute .
Можно указать несколько MethodImplOptions значений с помощью побитового оператора OR.
Note
Блокировка экземпляра или типа, как и Synchronized флаг, не рекомендуется для общедоступных типов, так как код, отличный от собственного, может принимать блокировки на общедоступные типы и экземпляры. Это может привести к взаимоблокировкам или другим проблемам синхронизации.