티스토리 뷰

목차

    반응형

    윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)


    속도 자체만 놓고 보면, 기본 자료형인 Int32가 제일 빠릅니다. 아마도 형변환 속도 순서[참고]도 똑같을 겁니다.


    Int16 Int32 Int64 속도 비교[윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)]


    윈도우7에서 나온 위의 결과입니다. 소스가 바로 아래에 있습니다. (언어는 C#)



    예제 설명

    1. 10,000 by 10,000의 『배열 3개』를 선언. (Int16, Int32, Int64)
    2. 배열 내부에 데이터를 할당 대입.
    3. 별도의 변수 1개에 배열의 값을 차례로 할당.
    4. 2, 3의 과정을 스톱 워치로 체크.


    Int16, Int32, Int64 속도 비교, 윈도우7 64비트 C# 소스 예제


    ■ 소스 코드

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    using System.Diagnostics;
     
    namespace IntIntInt
    {
        class Program // C# 코드
        {
            static void Main(string[] args)
            {
                Int16 rangeVar16 = 10000;
                int rangeVar32 = 10000;
                Int64 rangeVar64 = 10000;
     
                // StopWatch
                Stopwatch sw = new Stopwatch();
     
                // Array, Target variable
                Int16[,] sixteen = new Int16[rangeVar16, rangeVar16];
                Int16 target16 = 0;
     
                int[,] thirtytwo = new int[rangeVar32, rangeVar32];
                int target32 = 0;
     
                Int64[,] sixtyfour = new Int64[rangeVar64, rangeVar64];
                Int64 target64 = 0;
     
                // Temp variable
                int tmp1, tmp2;
                
     
                // start
                // 윈도우7 64비트 Int16
                sw.Start();
     
                for (Int16 i6 = 0; i6 < rangeVar16; i6++)
                {
                    for (Int16 tmpi6 = 0; tmpi6 < rangeVar16; tmpi6++)
                    {
                        sixteen[i6, tmpi6] = tmpi6;
                    }
                }
     
                for (tmp1 = 0; tmp1 < rangeVar16; tmp1++)
                {
                    for (tmp2 = 0; tmp2 < rangeVar16; tmp2++)
                    {
                        target16 = sixteen[tmp1, tmp2];
                    }
                }
                sw.Stop();
     
                Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 16");
                sw.Reset();
     
                // 윈도우7 64비트 Int32
                sw.Start();
     
                for (int i32 = 0; i32 < rangeVar32; i32++)
                {
                    for (int tmpi32 = 0; tmpi32 < rangeVar32; tmpi32++)
                    {
                        thirtytwo[i32, tmpi32] = tmpi32;
                    }
                }
     
                for (tmp1 = 0; tmp1 < rangeVar32; tmp1++)
                {
                    for (tmp2 = 0; tmp2 < rangeVar32; tmp2++)
                    {
                        target32 = thirtytwo[tmp1, tmp2];
                    }
                }
                sw.Stop();
     
                Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 32");
                sw.Reset();
     
                // 윈도우7 64비트 Int64
                sw.Start();
                for (Int64 i64 = 0; i64 < rangeVar64; i64++)
                {
                    for (Int64 tmpi64 = 0; tmpi64 < rangeVar64; tmpi64++)
                    {
                        sixtyfour[i64, tmpi64] = tmpi64;
                    }
                }
     
                for (tmp1 = 0; tmp1 < rangeVar64; tmp1++)
                {
                    for (tmp2 = 0; tmp2 < rangeVar64; tmp2++)
                    {
                        target64 = sixtyfour[tmp1, tmp2];
                    }
                }
     
                sw.Stop();
     
                Console.WriteLine(sw.ElapsedMilliseconds.ToString() + "ms : 64");
                sw.Reset();
            } // C# 코드 종료
        }
    }
    cs



    ■ 속도 차이 설명

    왜 이런 속도 차이가 나올까?... 해서, 어셈블리 코드를 봤습니다.


    Int16 Int32 Int64 속도 비교 - 어셈블리 코드[윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)]


    왼쪽이 Int16, 오른쪽이 Int32. (C# 코드)


    윈도우7 64비트에서 Int32란, 기본 자료형인 "int"입니다.


    JAE까지 넘어가는데 있어서 Int32의 코드가 더 짧습니다.


    "JA >" , "JE =" , "JAE >="


    Int 16을 기본 자료형인 Int 32 형태로 교환하는 과정을 거치다 보니 오히려 속도는 느려지네요.


    호기심에 점심 시간을 이용해 잠깐 찍어 봤는데 재밌네요 ㅎㅎ.



    윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)



    어셈 코드는 아래 txt 파일에 담겨있으니 참조하세요.


    int를 string으로 바꾸는 경우가 많은데 이 포스트도 참조해 보시고 아래 어셈블리 결과도 확인해 보세요.


    샘플 Assembly 코드


     윈도우7 64비트, Int16, Int32, Int64 속도 비교 (C# 코드)

    반응형