Что делает этот атрибут: 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 начинается с:
При вычислении, встроенном расширении или встраивании, это оптимизация вручную или компилятора, которая заменяет сайт вызова функции телом вызываемого абонента. Эта оптимизация может улучшить время и пространство во время выполнения при возможной стоимости увеличения конечного размера программы (т.е. Размера двоичного файла).