Что делает этот атрибут: MethodImplOptions.NoInlining(или: что такое "inlining" метод)

Возможный дубликат:
Встроенные функции в С#?


Что такое метод inline?

Я отлаживал код, а "возможный" источник проблемы находится в функции, которая помечена этим кодом:

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
protected virtual void PropertyHasChanged()

Чтение MSDN говорит следующее: Указывает, что метод не может быть встроен.

Но что такое "встраивание" метода?

EDIT:

Чтобы уточнить: метод PropertyHasChanged() вызывается в методе SET каждого свойства и обновляет (добавляет 1 к нему) счетчик внутренних объектов. Когда этот счетчик > 0, объект будет помечен как "грязный" и будет сохранен в базе данных при вызове Save. Когда счетчик = 0, объект не будет сохранен в базе данных. Теперь у меня есть идея, что этот код иногда не выполняется (счетчик не увеличивается), поэтому объект не будет сохранен в базе данных,

Ответ 1

Вложение метода/свойства означает, что компилятор принимает его и заменяет вызовы на него своим содержимым (убедитесь, что правильные переменные и т.д.). Это не что-то конкретное С#.

Это выполняется для нормальной работы.

Например, с помощью этого метода и вызова:

private long Add(int x, int y)
{
   return x + y;
}

var z = Add(x, y);

Компилятор может включить его как (исключая метод в процессе):

var z = x + y;

Статья Wikileida Расширение Inline начинается с:

При вычислении, встроенном расширении или встраивании, это оптимизация вручную или компилятора, которая заменяет сайт вызова функции телом вызываемого абонента. Эта оптимизация может улучшить время и пространство во время выполнения при возможной стоимости увеличения конечного размера программы (т.е. Размера двоичного файла).