2014-12-09 3 views
0

제발 아무도 C# .Net에서 설정하기 전에 속성 값을 확인하는 것이 더 성능이 좋고 값이 다른 경우에만 설정하는 것이 좋습니다. 아니면 맹목적으로 새 값으로 설정하는 것이 더 성능이 좋은가요? 예를 들어설정하기 전에 속성 값을 확인하고 설정이 다르게 설정되었거나 설정이 맹목적으로 설정되는 것보다 빠르거나 느린 경우?

:

bool newActiveState = true; 

// Only set the value if it differs 
if(myObject.IsActive != newActiveState) 
{ 
    myObject.IsActive = newActiveState; 
} 

bool newActiveState = true; 

// Set it blindly 
myObject.IsActive = newActiveState; 

대 한 방법은 다른 것보다 더 나은 컴파일러 도움이됩니까? 한 가지 방법으로 더 나은 컴파일러 힌트를 제공합니까?

이득이 있다면 그것은 마이크로 최적화 일 뿐이지 만 방대한 중첩 재귀 루프에서는 알아두면 편리하다는 것을 알고 있습니다. ~ 아담 Houldsworth에 의해 정화 질문에 따라

업데이트 :

는 가정은 일반 재산이며, 어떤 코드가 설정에서 실행되지 않지만 나중에 코드는 속성 값을 읽고에만 그렇다면, 시간이 소요되는 프로세스를 수행 이 코드의 범위에 속하지 않습니다.

+5

설정되는 데이터의 크기와 값이 변경 될 때 코드가 실행되는지 여부에 따라 다릅니다. –

+2

이것은 데이터에 따라 다르지만 단순한 'bool'필드의 경우 차이는 무시할 수 있습니다. * (있는 경우) *. 확실히 마이크로 최적화. – Habib

+0

좋아, 그래서 그냥 일반 속성 및 설정에서 실행되는 코드를 가정하지만 나중에 코드를 속성 값을 읽고 시간이 많이 소모되는 프로세스를 수행하므로이 코드의 범위를 않습니다. 질문을 업데이트 해 드리겠습니다. – Dib

답변

1

설명에 따르면 속성 설정의 직접적인 결과로 다른 코드가 실행되지 않는다면 검사를 수행해도 아무런 이점이 없습니다. 값이 동일하지하고 CPU가 더 않았다 값, 작업 후 총량을 설정 끝날 경우, 분명히

if (myObject.IsActive != newActiveState) 
{ 
    myObject.IsActive = newActiveState; 
} 

:

는 더 자세하게에서 코드를 고려 찾으려면 맹목적으로 값을 설정하는 것보다 즉, 변수를 설정해야합니다.

값이 같으면 세트를 확인하고 분기해야합니다.

그래서

  • 경우 체크 및 분기는
  • 체크 및 분기에 저장 시간이 여분의 쓰기 시간을 만회하게 쓰기보다 빠르다
  • 다음 조건 빠를 수

값을 설정하는 빈도와 설정하지 않는 값을 결정하기 위해 몇 가지 분석을 수행하고이 분석을 사용하여 두 경우 각각에 소요 된 총 시간을 결정해야합니다. 그런 다음 예상되는 세트/분기 비율에 따라 해당 코드 비트에 평균 시간을 제공 할 수 있습니다. 그런 다음 해당 숫자를 동일한 수의 블라인드 기록에 대해 취한 총 시간과 비교할 수 있습니다.

그래도 문제를 해결할 수 있습니다. 브랜치와 블라인드 글쓰기 사이에 차이가 있다면, 매우 작을 것입니다. 아마 마이크로 초의 분수 일 겁니다. 기록되는 메모리 위치가 이미 CPU 캐시에 있으므로 쓰기 작업이 빨라집니다. 지사와 서면의 차이 (있는 경우)가 있더라도 조건부 테스트의 추가 비용을 보충하지는 않습니다.

+0

고마워, 내가 읽을 줄 모르겠다는 것과 같은 것들이다. 또한 CLR에 이미 적용되는 평등 검사 또는 최적화가 있는지 전혀 알 수 없으므로 필요하지 않습니다. 나는 세터가 값 비싼 코드를 가지고 있다면 이점이 있지만, 세터가 비싸지는 않은지 확신 할 수 없다. 설명해 주셔서 감사합니다. – Dib