Почему Linq к Sql использовали эту строку при создании свойства

Я читал Linq в Sql. Здесь я создал dbml файл, где я нашел, что было создано автоматически сгенерированное свойство

[Column(Storage="_RecursionLevel", DbType="Int")]
public System.Nullable<int> RecursionLevel
{
    get
    {
        return this._RecursionLevel;
    }
    set
    {
        if ((this._RecursionLevel != value))
        {
            this._RecursionLevel = value;
        }
    }
}

Здесь, почему if ((this._RecursionLevel != value)) строка записана. Какова цель. Почему не непосредственно присвоенный значение. Что извлекает выгоду, они добрались

1
задан Shantanu Gupta 5 August 2010 в 19:40
поделиться

3 ответа

Сборщик мусора отслеживает области памяти, в которые производится запись с момента последней сборки мусора. Если регион не записывается, сборщик мусора может пропустить множество проверок.

Простое присвоение помечает память как грязную, даже если записанная память содержит то же значение.

Проверьте эту статью. Прочтите разделы «Заставить поколения работать с барьерами записи» и «Слишком много записей объектов».

2
ответ дан 2 September 2019 в 22:24
поделиться

Обычно с классами linq to sql (или, по крайней мере, когда я их использовал) также запускается событие propertynotification. Так я предполагаю, что линия, запускающая событие, отсутствует.

Потому что, если значение не было изменено, нет необходимости изменять его и, следовательно, нет необходимости запускать это событие.

0
ответ дан 2 September 2019 в 22:24
поделиться

В основном проверяется, отличается ли значение, которое вы пытаетесь присвоить свойству, от того, что есть сейчас. Присвоение будет выполнено только в том случае, если значение отличается. Предположительно, это оптимизация, которая избавляет от ненужных присваиваний, когда они одинаковы, и предотвращает любые события "OnChange", срабатывающие без веской причины.

0
ответ дан 2 September 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: