2010-08-05 2 views
1

나는 Linq를 Sql로 읽었습니다. 내가 if ((this._RecursionLevel != value)) 라인이 기록 된 이유를 자동 생성 속성이 여기에 Linq to Sql이 속성을 생성하는 동안이 줄을 사용하는 이유

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

를 만들어 졌음을 발견 한 곳 여기서 나는 DBML 파일을 만들었습니다. 목적은 무엇입니까? 직접 값을 할당하지 않는 이유는 무엇입니까? 그들이 얻은 이점

답변

2

가비지 수집기는 마지막 GC 이후에 기록 된 메모리 영역을 추적합니다. 영역에 쓰지 않은 경우 가비지 수집기는 많은 검사를 건너 뛸 수 있습니다.

작성된 메모리에 동일한 값이 포함되어 있어도 간단한 할당은 메모리를 더티로 표시합니다.

Check this article. "생성 장벽 쓰기 방지"및 "너무 많은 개체 쓰기"에서 읽습니다.

0

보통 linq to sql 클래스 (또는 적어도 'em'를 사용했을 때)에는 또한 속성 동기화 이벤트가 발생합니다. Sooo 나는 이벤트를 실행하는 라인이 없다고 가정하고있다.

값이 변경되지 않았 으면 값을 변경하지 않아도되므로 해당 이벤트를 실행할 필요가 없습니다.

0

기본적으로 속성에 할당하려는 값이 현재의 값과 다른지 확인합니다. 값이 다른 경우에만 할당을 수행합니다. 아마도 이것은 불필요한 할당이 동일 할 때 절약하고 적절한 이유없이 "OnChange"이벤트를 중지하는 최적화입니다.

+0

townsean : 불필요한 이벤트를 저장하려면이 확인이 사용되었습니다. 이벤트가 없다면 최적화라고 가정합니다. 두 사람 사이에서 더 광대 한 작업은 무엇입니까? 양도 또는 점검 –

+1

좋은 질문입니다. 나는 어느 쪽이 더 비싸지는 모르겠지만, 나는 그것에 대한 해답에 관심이있다. –

관련 문제