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
- Наследование
- Атрибуты
Поля
AggressiveInlining | 256 | Метод должен по возможности выполняться как встроенный. Ненужное использование этого атрибута может снизить производительность. Атрибут может привести к обнаружению ограничений реализации, что приведет к замедлению создания кода. Всегда измеряйте производительность, чтобы обеспечить полезность применения этого атрибута. |
AggressiveOptimization | 512 | Метод содержит код, который всегда должен быть оптимизирован для производительности. Этот атрибут используется редко. Методы, применяемые к этому атрибуту, обходят первый уровень многоуровневой компиляции и, следовательно, не получают преимуществ от оптимизаций, основанных на многоуровневой компиляции. К этим оптимизациям относятся динамические PGO и оптимизации на основе инициализированных классов. Использование этого атрибута также может увеличить использование памяти. Всегда измеряйте производительность, чтобы обеспечить полезность применения этого атрибута. |
ForwardRef | 16 | Метод объявлен, но его реализация находится в другом месте. |
InternalCall | 4096 | Вызов является внутренним, то есть вызывает метод, который реализован в пределах той же среды CLR. |
NoInlining | 8 | Метод нельзя выполнять как встроенный. Встраивание — это способ оптимизации, при котором вместо вызова метода в код вставляется тело метода. |
NoOptimization | 64 | Метод не оптимизирован JIT-компилятором или службой создания машинного кода (см. Ngen.exe) при отладке потенциальных проблем с созданием кода. |
PreserveSig | 128 | Подпись метода должна экспортироваться в точном соответствии с объявленной. |
SecurityMitigations | 1024 | Этот элемент зарезервирован для использования в будущем. Он появился в .NET Framework 4.8. |
Synchronized | 32 | В определенный момент времени метод может выполняться только одним потоком. Статические методы выполняют блокировку по типу, а методы экземпляра — по экземпляру. Только один поток может выполняться для любой из функций экземпляра, и только один поток может выполняться для любой из статических функций класса. |
Unmanaged | 4 | Метод реализован в неуправляемом коде. |
Комментарии
Это перечисление используется с атрибутом MethodImplAttribute .
Можно указать несколько MethodImplOptions значений с помощью побитового оператора OR.
Примечание
Блокировка экземпляра или типа, как и с флагом Synchronized
, не рекомендуется для открытых типов, так как код, отличный от собственного, может принимать блокировки для открытых типов и экземпляров. Это может привести к взаимоблокировкам или другим проблемам синхронизации.