Microsoft MVP성태의 닷넷 이야기
IEnumerable 의 "지연된 평가" 에 관하여 질문드립니다. [링크 복사], [링크+제목 복사],
조회: 15123
글쓴 사람
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)
5570초보11/16/202113333주식데이터 초당 수신 건수를 구하고 있는데 처리속도가 느려서요 [2]
5569카짜프로...11/14/202114848381페이지 UTC에대한 언급이 그리니치 천문대 시간으로 되어있는게 맞나요? [1]
5568카짜프로...11/14/202114914그림 5.20, 그림 5.22 언급 오류 [1]
5567Edun11/2/202113087쿼리문을 코드로 어떻게 처리할 수 있을까요? [2]
5566민성10/26/202112724Linq에 관해서 [1]
5565pass...10/25/202113888wpf에서 Cefsharp를 AnyCPU로 작업 했는데 실행이 되지 않습니다. [4]
5564초보10/21/202112113오버라이드 관련 질문드립니다 [2]
5562서지훈10/20/202112092win32 api 문의 드립니다. (EnableMenuItem) [5]
5561Edun10/15/202113036도와주세요!! 팝업 띄우는 더블클릭 이벤트!! 부탁드립니다 ㅠㅠ [4]파일 다운로드1
5560Edun10/13/202113274C#초보자 개념이해 도와주세요!! [4]
5559최가운10/5/202113930C# debugging 중에 Thread Pool Worker들이 사라지는데요 [3]
5558옥코드9/29/202114091안녕하세요! EntityFramework Linq 질문 드리겠습니다. [4]
5557임기성9/16/202114059웹 사이트(IIS)가 오류로 인하여 빈번하게 죽는 이슈 문의 [1]
5556hjlee9/13/202113040visual studio 설치 없이 csi.exe (C# interactive) tool을 설치할 수 있을까요? [2]
5555이성열 donator9/2/202112555C# 런타임(Reflection)에서 소스코드에 입력한 함수설명(Summary)을 가져올 수 있을까요? [3]
5554농상9/2/202114010enum 원소값이 중복인 경우 출력 [4]
5553shdt...8/31/202112177제너릭을 new로 할당했는데 null인 경우가 존재하나요? [1]
5552hjsh...8/30/202112803C# 폼 - 마우스가 다른 버튼 위를 움직일 때도 폼의 페인트핸들러가 호출되는 것이 맞나요? [2]
5551하나다라마8/27/202112618뽀모도로 타이머 개선사항 [1]
5550하영8/27/202115419SqlDataReader 관련 질문입니다. [8]
5549책 감사...8/23/202117550C# 9.0 책 오타 [1]
5548Dev8/23/202114280String의 IndexOfAny 함수 질문 [3]
5547민성8/20/202112868WPF Radio 버튼을 GroupName으로 읽어와서 비교하기 [1]
5546Deve...8/19/202113894C++ C# API 연동 관련 [1]
5545영귤8/18/202113349C# 14.3장 예제에서 반환 값의 값 복사 부하가 어디서 발생하는 것인가요? [4]
5544이상호8/18/202113691C# Graphics 객체 저장 가능 여부 [2]
... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...