-1

접근 자 메서드 내에 null 병합 연산자를 두는 것이 성능에 미치는 영향이 있는지 여부를 stackoverflow에서 살펴 보았습니다. 내가 구문이 정확한지 모르겠어요,하지만 난 디버깅 할 때, 민간 객체를 설정접근 자 메서드에서 누적 병합 연산자

private Uri _Url; 
public Uri Url 
{ 
    get 
    { 
     return _Url = _Url ?? new Uri(Utilities.GenerateUri()); 
    } 
} 

:

private Uri _Url; 
public Uri Url 
{ 
    if(_Url == null) 
     _Url = new Uri(Utilities.GenerateUri()); 
    return _Url; 
} 

후 : 전에

.

누군가가 그 요점을 묻기 전에 우리는 가독성을 위해 글을 쓸지 (처음에는 더 읽기 쉽다), 아니면 성능을 위해 글을 쓸지에 대해 내부적으로 토론했습니다.

컴파일러의 최적화 여부는 무엇입니까 ?? 항상 수동 null 체크보다 낫다. 마이크로 최적화는 나쁜,하지만 난 당신이 실제로이 쓸 수

+0

나는 꽤 그 두 사람이 [거의] 같은 일리노이를 생산한다고 확신한다. 불행히도, 내 환경은 저를 검사 할 가능성을주지 않습니다. 일반적으로 성능이 중요하지 않으면 항상 가독성을 고려해야합니다. – Leri

+0

순수한 의견을 바탕으로 한 질문 - 당신이 더 좋아하는 버전을 선택하십시오. 성능에 영향이 있다고 생각되면 IL을 측정하거나 살펴보십시오. (나는 거의 0 차이가있을 것이라고 기대하지만 어떤 결과에도 내기를하지는 않을 것입니다 ... 어떤 추가 작업이 측정 가능한 영향을 끼치 지 않을 것입니다) –

답변

2

단지 호기심 :

return _Url ?? (_Url = new Uri(Utilities.GenerateUri())); 

는 지금까지 성능이가는대로, 그것은 실제적으로, 경우에 그래서 차를 이용하지 않은 경우와 같은 일이다.

+0

구문이 분명하고 간결 해 보입니다. –

+0

@LeeGary 이것은 당신보다 나은 한 줄기지만. .. 정말로 원하니? 비 C# 개발자가 코드를 사용한다면 어떻게 될까요? 나는 아주 특별한 언어를 사용했지만 처음 직장을 그만 뒀을 때 첫 달에 하루에 1-2 시간을 보내고이 회사의 새로운 개발자에게 무엇을하고 있는지 설명했다. 그 이후로 나는 정말로 중요한 것을 제공 할 때만 그러한 기능을 사용합니다. 그러나 이것은 공개 토론으로 이어질 수 있습니다. – Leri

+0

@Leri 흠, 나는 언어에 구애받지 않는 것에 동의하지 않는다. 나는 언어가 제공하는 것을 활용하는 경향이 더 크다. .net에서 var를 사용하는 것에 대한 토론과 마찬가지로 코드가 매우 javascripty로 보이지만 실제로는 생산성이 향상됩니다. –