shown입니다. '캐스팅'은 프리픽스 캐스팅보다 훨씬 빠르지 만 '반사'는 무엇입니까? 얼마나 나빠? 상상할 수있는 것처럼 Google에서 '검색 함'을 검색하는 것은 대단히 효과적이지 않습니다.C#의 'is'reflection의 성능 특성은 무엇입니까?
답변
몇 가지 옵션이 있습니다 :
고전 캐스트- :
Foo foo = (Foo)bar
- 을
as
캐스트 연산자 :Foo foo = bar as Foo
is
시험 :bool is = bar is Foo
bar
안전하게 (빠른)Foo
으로 변환 할 수 있는지 확인하는 데 필요고전 캐스트, 다음은 실제로 (느린)을, 또는 (아주 천천히) 예외를 throw합니다.bar
가 캐스팅 될 수있는 경우 다음 캐스트를 수행하거나 안전하게 캐스트 할 수없는 경우, 그것은 단지null
를 반환 확인해야as
연산자.is
연산자은bar
이 Foo로 캐스트 될 수 있는지 확인하고boolean
을 반환합니다. 그것은 단지 전체 주조 작업의 첫 번째 부분을 수행하기 때문에
is
테스트, 빠른이다. as
연산자는 캐스트가 실패 할 경우 예외를 throw하지 않기 때문에 클래식 캐스트보다 빠릅니다 (캐스트가 실패 할 수 있다고 합법적으로 예상하는 상황에 적합).
그냥 변수 bar
당신이 bar
이 Foo
경우 테스트 할거야 경우 Foo
다음의 is
운영자, 하지만를 사용하는 경우 알고 싶다면, 그렇다면, 다음 캐스팅이면 as
연산자를 사용해야합니다.
본질적으로 모든 캐스트는 캐스트가 유효한지 확인하기 위해 내부적으로 is
체크와 동등한 작업을 수행해야합니다. 따라서 is
체크를 수행하고 전체 캐스트 (as
캐스트 또는 클래식 캐스트 연산자)를 수행하면 is
검사를 두 번 수행하는 것이 약간의 추가 오버 헤드가됩니다.
체크가 가장 느립니다. 참조 유형을 반환하기 때문에 캐스트가 참조 유형에 대해 매우 빠릅니다. –
이 한 가지 대답은 저에게 아이디어를 얻는데 도움이되었습니다 .. – nawfal
"is"는 "isinst"IL 연산자와 기본적으로 동일합니다.
중요하지 않아도 될만큼 빠릅니다.
if (obj is Foo) {
Foo f = (Foo)obj;
f.doSomething();
}
사양이 낮은 : 당신이
설계 내가 배운 방법을 재고 할 필요가 성능에 눈에 띄는 영향을 미칠 수 있도록하기 위해 당신이 객체만큼의 유형을 확인하는 경우는이 때문이다 :
Foo f = obj as Foo;
if (f != null) {
f.doSomething();
}
문제가 될만큼 충분히 느린가요? 아마 아니지만,주의를 기울이는 것이 너무 간단합니다. 그렇게 할 수도 있습니다.
- 1. 스파게티 코드의 특성은 무엇입니까?
- 2. jQuery 선택기의 성능 특성은 CSS 선택기의 성능 특성과 어떻게 다릅니 까?
- 3. BasicHttpBinding 끝점 구성에서 담당하는 bindingConfiguration 특성은 무엇입니까?
- 4. 스트림이란 무엇을 의미합니까? 그것의 특성은 무엇입니까?
- 5. 문제/특성은 C++
- 6. .Net SvcUtil : 특성은 선택적이어야합니다.
- 7. ThreadStatic 특성은 어떻게 작동합니까?
- 8. KnownType 특성은 언제 사용하면됩니까?
- 9. C# CoClass 특성은 무엇을 수행합니까?
- 10. EnumDataType 특성은 ASP.NET MVC에서 무엇을합니까?
- 11. 요소 대 특성은 언제 사용해야합니까?
- 12. 이 .NET 특성은 어떤 역할을합니까?
- 13. Objective-C의 '^'는 무엇입니까
- 14. C의 & 포인터의 결과는 무엇입니까?
- 15. C의 공용 라이브러리는 무엇입니까?
- 16. Objective-C의 retainCount는 무엇입니까?
- 17. 왜 C# (상당히 느린)과 Win32/C의 성능 차이가 있습니까?
- 18. Objective-C의 점 표기법과 메서드 호출의 성능 차이
- 19. 필드의 순서를 설정하기 위해 System.ComponentModel 네임 스페이스에서 사용할 특성은 무엇입니까?
- 20. C의 알고리즘
- 21. @ 기호는 Objective-C의 의미는 무엇입니까?
- 22. Objective-C의 "범주"란 무엇입니까?
- 23. C와 임베디드 C의 차이점은 무엇입니까?
- 24. Objective-C의 super는 정확히 무엇입니까?
- 25. C의 "개인 헤더"란 무엇입니까?
- 26. DesignOnly 특성은 런타임에 속성을 숨기지 않습니다.
- 27. Yii : 모델 특성은 형식을 유지하지 않습니까?
- 28. iPhone objective-C의 이러한 작업은 성능 측면에서 비용이 많이 드는 이유는 무엇입니까?
- 29. unordered_map에서 찾기의 성능
- 30. LoadControl의 성능 영향은 무엇입니까?
'is is very very fast. –
나는 중복 된 질문을 닫는 데있어서 날짜가 유일한 결정 요인이 아니라는 사실을 알고 있습니다.하지만 다른 질문이 게시되기 전에 제 질문이 게시되고 응답되고 upvoted되었습니다. _It_은 중복 된 것이지,이 것이 아닙니다. –