My Name is Kay....

DIY , 먹방 , 개발 , 육아 , 여행 좋아합니다.
AdBlock 사용시 화면이 정상적으로 노출되지 않습니다.
포스팅 관련 문의 및 개발 문의는 Email : wkzkfmxksi@gmail.com

추가 포스팅이 이뤄지지 않는 블로그입니다. 문의는 wkzkfmxksi@gmail.com 으로 연락주세요.
kay
조회 수 11800 추천 수 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 C# ComboBox Option ( Add , Set , Get ) kay 2013.07.10 16002
34 C# Confirm Massage 창 띄우기 kay 2013.07.22 13001
» C# [담아온글] For vs Foreach Performance 속도 대결 1 kay 2013.09.04 11800
32 C# C# 외부 프로그램 실행하기 ( Process.Start ) kay 2013.08.06 10548
31 C# TextBox 에서 줄바꿈 넣기 kay 2013.07.22 10389
30 C# DataGridView 에서 Cells 값 Null/Empty 체크하기 kay 2013.07.22 9514
29 C# 폼에서 새폼 열고 자신은 완전히 닫기. kay 2013.07.26 7607
28 C# C# FTP 이용시 유용한 클래스 kay 2014.09.29 6185
27 C# dataGridView 내용 정렬 ( DefaultCellStyle , ColumnHeadersDefaultCellStyle ) kay 2013.07.08 5877
26 C# DataGridViewComboBoxColumn Change 이벤트 Value 값 가져오기 kay 2013.09.02 5369
25 C# appSettings 값 추가하기 , 읽어오기 , 값 존재 유무 체크 kay 2013.12.23 5237
24 C# C# 엑셀데이터 읽어서 디비에 저장 file kay 2014.10.14 5127
23 C# 엑셀 내보내기 , Exporting DataGridview To Excel kay 2013.08.08 5117
22 C# DataGridView ComboBox editingcontrolshowing 이벤트 걸기 kay 2013.09.04 4693
21 C# 엑셀 내보내기 , Exporting SQL To Excel kay 2013.09.05 4328
20 C# 화면 캡쳐하기 kay 2013.09.02 4058
19 VB 파일 읽기 , 복사 , 삭제 , 쓰기 , 파일 유무 kay 2013.09.27 3950
18 C# SqlCommand 재사용(Reuse) 하기 kay 2013.07.10 3919
17 C# TextBox KeyEvent 엔터 이벤트 실행하기 kay 2013.07.26 3838
16 C# MDI 폼 이동 및 시작 폼 설정하기 kay 2013.07.09 3429
Board Pagination Prev 1 2 Next
/ 2