My Name is Kay....

DIY , 먹방 , 개발 , 육아 , 여행 좋아합니다. AdBlock 사용시 화면이 정상적으로 노출되지 않습니다.



kay
조회 수 11085 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

결론으로 짧게 정리하면

for문을 사용하고 그 길이를 변수에 저장하고 내부에서 casting 해서 사용하는 것이 foreach 보다 더 빠르다.

경우에 따라 3배정도의 차이가 난다고 합니다....


dataGridView의 출력 속도 때문에 고민하던 중 foreach문에서 느려지는것을 확인하고 찾아본 자료입니다..



처음에는 데브피아에서 자료 (http://www.hoons.net/Board/QACSHAP/Content/33775) 를 찾았는데 돌다보니 아래와 같이 테스트하신 분이 있었네요..


//A comment on a recent post of mine on Stack Overflow suggested that I replace my "for" loop with a more "modern" version using "foreach" and Enumerable.Range. In other words:

// replace this
for (int i = 0; i < 1000; i++)
{
}

// with this
foreach (var i in Enumerable.Range(0, 1000))
{
}
 

//I can't really say that I prefer one over the other, although the second approach does look kinda cool. 
//It'd be even nicer if there were some native support for ranges in C# like there was in Pascal:

// borrowing Pascal's range syntax
foreach (var i in [0..1000])
{
}
//... but I digress. What I wanted to talk about in this post is my findings on the performance difference between a simple "for" loop and a "foreach" over Enumerable.Range.
// I timed two long loops using a Stopwatch:

const int count = 100000000;
var sw = new Stopwatch();

sw.Reset();
sw.Start();
for (int i = 0; i < count; i++)
{
}
sw.Stop();
var forTime = sw.ElapsedTicks;

sw.Reset();
sw.Start();
foreach (var i in Enumerable.Range(0, count))
{
}
sw.Stop();
var foreachTime = sw.ElapsedTicks;

Console.WriteLine(forTime);
Console.WriteLine(foreachTime);
Console.WriteLine((float)foreachTime / forTime);
 
/*
The result:

4869915
14286932
2.933713
So the Enumerable.Range approach is three times slower than a simple for loop.

I guess in a real-world situation where the body of the loop is the thing taking the bulk of the time, there wouldn't be that big a difference, but it's interesting that the two approaches differ in performance by so much. Something to be aware of if you're very performance-oriented in your code, anyway.
*/

?
  • ?
    박싱foreach 2017.09.26 13:50
    오래 걸리게 foreach를 썻네요. 박싱언박싱하면 for문이라도 느려집니다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
35 VS IIS에서 .Net 날짜 형식 YYYY-MM-DD file kay 2015.08.24 290
34 C# 웹 사이트 모니터링 프로그램 C# file kay 2015.08.18 1289
33 C# C# SMTP 서버를 이용한 메일 발송 1 kay 2015.07.30 440
32 VS .net Release / Debug 콤보박스 안보일때 file kay 2015.05.08 319
31 C# C# 엑셀데이터 읽어서 디비에 저장 file kay 2014.10.14 2766
30 C# C# 소수점 지정 kay 2014.10.14 1259
29 C# C# FTP 이용시 유용한 클래스 kay 2014.09.29 3611
28 C# appSettings 값 추가하기 , 읽어오기 , 값 존재 유무 체크 kay 2013.12.23 4730
27 C# 스레드에서 함수 호출시 매개변수 넘기기 kay 2013.10.29 2664
26 C# multiLine TextBox 자동 스크롤시키기 kay 2013.10.29 2905
25 VB 파일 읽기 , 복사 , 삭제 , 쓰기 , 파일 유무 kay 2013.09.27 3042
24 C# 엑셀 내보내기 , Exporting SQL To Excel kay 2013.09.05 3646
» C# [담아온글] For vs Foreach Performance 속도 대결 1 kay 2013.09.04 11085
22 C# DataGridView ComboBox editingcontrolshowing 이벤트 걸기 kay 2013.09.04 3257
21 C# 문자열 검색 " String.Contains() " kay 2013.09.04 2792
20 C# DataGridViewComboBoxColumn Change 이벤트 Value 값 가져오기 kay 2013.09.02 3647
19 C# 화면 캡쳐하기 kay 2013.09.02 3308
18 C# 엑셀 내보내기 , Exporting DataGridview To Excel kay 2013.08.08 4436
17 C# C# 외부 프로그램 실행하기 ( Process.Start ) kay 2013.08.06 8653
16 C# TextBox KeyEvent 엔터 이벤트 실행하기 kay 2013.07.26 3044
Board Pagination Prev 1 2 Next
/ 2