Microsoft MVP성태의 닷넷 이야기
IEnumerable 의 "지연된 평가" 에 관하여 질문드립니다. [링크 복사], [링크+제목 복사],
조회: 15114
글쓴 사람
Question
홈페이지
첨부 파일

안녕하세요. 또 질문드리게 되네요.. ^^

제가 C# 6.0 책을 보던 중 이 부분이 궁금하여 테스트를 진행해봤습니다.

그런데 FindAll 은 모든 요소를 대상으로 실행된다고 되어있고,

Where 은 열거자를 통해 요소를 순회할 때 하나씩 실행 된다고 되어있습니다. 그리고 이를 "지연된 평가" 라고 하고요.

또한 Where 의 장점이 데이터가 필요한 순간에만 코드가 CPU 에 의해 실행된다고 되어있습니다.

FindAll 은 데이터가 몇 개만 필요해도 필요한게 모두 끝날 때까지 CPU 가 실행되구요.

그렇다는 것은 Where 이 속도가 더 빨라야한다는 뜻인데..

어째서 인지 FindAll 이 아무리 돌려봐도 더 빠릅니다.

어떻게 된 영문인지 몰라 질문드립니다.

테스트 할 때 썻던 프로젝트는 첨부하였습니다.








[최초 등록일: ]
[최종 수정일: 11/19/2017]


비밀번호

댓글 작성자
 



2017-11-19 03시47분
대개의 경우 지연 평가가 더 느립니다. 지연 평가를 구현하기 위해 부가적인 코드가 더 수반되는데요, 그 부분이 오버헤드로 작용합니다. FindAll과 Where로 각각 구현한 코드를 .NET Reflector와 같은 역어셈블 도구로 확인해 보면 차이를 눈으로 확인할 수 있습니다.

지연된 평가는 필요한 순간까지 코드 실행을 미룬다는 것일 뿐 가장 빠르게 동작하는 코드를 생성하는 것은 아닙니다.
정성태
2017-11-20 03시48분
[Question] 아하 그렇군요. 감사합니다.
[guest]

... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5434한예지 donator12/23/202014901ToString 재정의 질문있습니다! [8]
5433한예지 donator12/23/202015059List<ArrarySegment<int>> 사용법 질문드립니다! [2]
5431한예지 donator12/17/202016265비동기 소켓 서버 질문 드립니다! [1]
5430종범12/16/202015213[WPF] Task 관련 재질문 드립니다. [2]파일 다운로드1
5429종범12/16/202015786[WPF] Task 관련 질문 드립니다. [1]파일 다운로드1
5428최선호 donator12/14/202015590성태님 ㅠ.ㅠ 소켓 서버 작동이 이상합니다 ㅠ.ㅜ [1]파일 다운로드1
542712/11/202016221LPBOOL Win32 마샬링 질문이 있습니다. [6]
5426하태12/11/202013838안녕하세요 정성태님! C# winform Calendar 컨트롤 질문 드리겠습니다!. [1]
5425정유경12/10/202014191[왕초보] (4) [1]
5423정유경12/8/202014276[왕초보] (3) [2]
5422이승준12/7/202019590VisualStudio 2019의 인텔리센스가 느려지는 경우가 있나요? [4]
5421정유경12/6/202016094[왕초보] (2) [4]
5420정유경12/5/202016103[왕초보] 랜덤 숫자와 배열에 관한 질문 [1]
5419종범12/4/202016360[WPF] Threadpool사용 시 크리티컬 섹션 대응 질문 입니다. [4]
5418한예지 donator11/27/202016879클래스, 인터페이스 크기를 구하고 싶은데 어떻게 해야 될까요? [1]
5417한예지 donator11/27/202014576인터페이스와 추상클래스에 대해 궁금증이 있습니다. [1]
5416한예지 donator11/27/202014466Object 질문 있어요. [1]
5415한예지 donator11/25/202014056교재 213쪽 예제 4.25 질문드립니다. [1]
5414한예지 donator11/23/202015467제네릭 리스트 출력하는 방법이 궁금합니다. [1]
5413민석11/20/202016503C# minidump를 프로그램이 중단 될 때 만들고 싶습니다. [1]파일 다운로드2
5411원격11/20/202014468visualstdio로 웹 사이트로 만들었을때 원격 디버깅이 가능한가요? [1]
5410최성재11/16/202014931vcpkg로 GDCM 내려받을 때 USE_VTK 설정하는 방법-2번째 질문 [1]파일 다운로드1
5409민성11/16/202018129혹시 다른 질문이긴 한데요 [1]
5408최성재11/16/202014749vcpkg로 GDCM 내려받을 때 USE_VTK 설정하는 방법 [1]
5407민성11/11/202013416안녕하세요 yield return에 대해서 [1]
5406질문자11/10/202014410안녕하세요 wcf nettcpbinding의 timeout에 관해서 질문이 있습니다. [2]
... 16  17  18  19  20  [21]  22  23  24  25  26  27  28  29  30  ...