본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - foreach vs Join ( 속도 테스트 )

728x90
반응형


 WPF & C# - foreach vs Join ( 속도 테스트 )



foreach_vs_Join.zip





MainWindow.xam



1
2
3
4
<Grid>
    <Button Content="속도 테스트&#xD;&#xA;foreach VS join&#xD;&#xA;" HorizontalAlignment="Left" Height="58" Margin="41,47,0,0" VerticalAlignment="Top" Width="166" Click="Button_Click"/>
    <Label x:Name="lbl" Content="" HorizontalAlignment="Left" Margin="41,110,0,0" VerticalAlignment="Top" Height="51" Width="166"/>
</Grid>
cs




MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
string[] arrVal = new string[1000];
private void Button_Click(object sender, RoutedEventArgs e)
{
    // 입력
    for (int i = 0; i < 1000; i++)
    {
        arrVal[i] = i.ToString();
    }
 
    lbl.Content += "Join = " + testJoin().ToString() + "\n";
    lbl.Content += "Foreach = " + testForeach().ToString() + "\n";
}
 
long testForeach()
{
    int loop = 10;   // 반복 측정 횟수
    long[] CurrentTime = new long[loop];   // 반복 측정 값
    Stopwatch stopWatch = new Stopwatch();   // 시간 측정 함수
 
    string str = null;
    for (int i = 0; i < loop; i++)
    {
        // 측정시작
        stopWatch.Reset();   // 스톱워치 준비
        stopWatch.Start();   // 스톱워치 시작
        foreach (string a in arrVal) str += arrVal;
        stopWatch.Stop();   // 스톱워치 끝
        CurrentTime[i] = stopWatch.ElapsedTicks;
    }
 
    // avarage
    long avarage = 0;
    for (int i = 0; i < loop; i++) avarage += CurrentTime[i];   // 측정 값 더하기
    avarage = avarage / loop;   // 평균값 구하기 (반복 횟수로 나누기)
    return avarage;   // 평균값 리턴
}
 
 
long testJoin()
{
    int loop = 10;   // 반복 측정 횟수
    long[] CurrentTime = new long[loop];   // 반복 측정 값
    Stopwatch stopWatch = new Stopwatch();   // 시간 측정 함수
 
    string str = null;
    for (int i = 0; i < loop; i++)
    {
        stopWatch.Reset();   // 스톱워치 준비
        stopWatch.Start();   // 스톱워치 시작
        str = string.Join("", arrVal);
        stopWatch.Stop();   // 스톱워치 끝
        CurrentTime[i] = stopWatch.ElapsedTicks;
    }
 
    // avarage
    long avarage = 0;
    for (int i = 0; i < loop; i++) avarage += CurrentTime[i];   // 측정 값 더하기
    avarage = avarage / loop;   // 평균값 구하기 (반복 횟수로 나누기)
    return avarage;   // 평균값 리턴
}
cs


속도 차이... 너무 난다.

단순히 string 값을 나열할때는 foreach 대신 Join 써야겠다.

쓸모없이 foreach를 쓰는 경우는 줄여야 겠다.


for 문을 안했다... 깜빡.. ㅡ,ㅡ;

다음에 올릴께요~ ^^;


728x90
반응형