Почему Linq to Sql использовали эту строку при создании свойства - PullRequest
1 голос
/ 05 августа 2010

Я читал Линка в 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)). Какова цель. Почему бы непосредственно не присвоить значение. Какую выгоду они получили

Ответы [ 3 ]

2 голосов
/ 06 августа 2010

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

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

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

0 голосов
/ 05 августа 2010

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

0 голосов
/ 05 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...