특정 구간에 코드 실행시간을 알아야내야 하는 경우에 필요한 포스팅 입니다.


코드를 작성하다 보면 딜레이가 발생하거나해서 어느 부분에 오버해드가 발생하여 시스템을 느리게하는지를 알아내야 하는 경우가 생길 수 있습니다.


또는 알고리즘을 공부하다보면 내가 구현한 알고리즘의 속도를 알고 싶을 때가 있습니다.


코드를 작성할때 중간중간 해당 함수나 코드가 느려질 것이 염려된다면 중간 중간 속도를 체크하면서 작성하면 좋습니다.



C# 에서 Stopwatch 클래스를 사용하여 프로그램의 수행시간을 측정할 수 있다.


네임스페이스로 using System.Diagnostics; 를 선언하고 Stopwatch 클래스를 사용하면 되다.



Stopwatch 클래스에 start 함수를 호출하면 시간측정을 시작하게 된다. 그리고 Stopwatch 클래스에 stop 함수를 호출 하면 시간측정이 끝나게 된다. 그리고 ElapsedMilliseconds 변수에 측정한 시간이 저장되게 된다. 그래서 해당 변수에 값을 출력하면 된다. 시간은 ms단위로 저장이 되기 때문에 만약 초단위로 보고 싶다면 /1000을 하면 된다.


아래는 사용 예제이다. 시간측정을하는 start와 stop을 하는 중간에 이중 for문을 사용하여 의미없는 연산을 계속하여 시간이 걸리게 하였다. 이중 for문에 i와 j의 조건값을 바꿔가며 측정시간이 어떻게 변하는지 직접 테스트해노는 것도 좋은 방법이다.

using System.Diagnostics;
 
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopwatch = new Stopwatch(); //객체 선언
        stopwatch.Start(); // 시간측정 시작
 
        int sum = 0;
        for (int i = 0; i < 10000; i++)
        {
            for (int j = 0; j < 100000; j++)
            {
                sum = i * j;
            }
        }
 
        stopwatch.Stop(); //시간측정 끝
 
        System.Console.WriteLine("time : " + 
                           stopwatch.ElapsedMilliseconds + "ms");
    }
}



사용할 때 아래의 코드를 복사해서 사용하면 된다.


        Stopwatch stopwatch = new Stopwatch(); //객체 선언
        stopwatch.Start(); // 시간측정 시작
 
       
 
        stopwatch.Stop(); //시간측정 끝
 
        System.Console.WriteLine("time : " + stopwatch.ElapsedMilliseconds + "ms");
 



추가로 아래 자바와 C,C++의 시간측정 방법이다.


자바(java) 코드의 실행 시간 구하기(시간 측정) : http://hijuworld.tistory.com/2


C, C++ 프로그램 실행 시간 측정 : http://hijuworld.tistory.com/1




Posted by 꿈만은공돌
,

프로그래밍을 하다보면 딜레이가 발생하거나해서 어느 부분이 느린지 알아내야 하는 경우가 생길 수 있습니다.


또는 알고리즘을 공부하다보면 내가 구현한 알고리즘의 속도를 알고싶을 때가 있습니다.


그럴때 특정 구간에 코드 실행시간을 알아야내야 하는 경우에 필요한 포스팅 입니다.


JAVA에서 코드에 실행 시간을 측정하거나 특정 구간에 시간이 얼마나 소요되는지를 알고 싶을때 사용하는 코드 입니다.


현재 시간을 받아오는 System 함수인 System.currentTimeMillis() 함수를 이용하면 쉽게 구할 수 있습니다.

시작 구간과 끝나는 구간에 각각 해당 함수를 써서 시간을 받아오고 두 시간간의 차이를 계산하면 ms 단위의 시간차를 구할 수 있습니다.


ms를 초(s)로 변환하고 싶다면 /1000을 해주면 됩니다.

추가로 초(s)를 분(m) 구하고 싶다면 /60을 추가로 해주면 됩니다.




- 사용 방법 -

1
2
3
4
5
6
7
long beforeTime = System.currentTimeMillis(); //코드 실행 전에 시간 받아오기
        
//실험할 코드 추가
        
long afterTime = System.currentTimeMillis(); // 코드 실행 후에 시간 받아오기
long secDiffTime = (afterTime - beforeTime)/1000//두 시간에 차 계산
System.out.println("시간차이(m) : "+secDiffTime);



- 사용 예시 -

1
2
3
4
5
6
7
8
9
10
11
12
13
long beforeTime = System.currentTimeMillis();
        
int sum = 0;
for (int i = 0; i < 1000000; i++) {
    for (int j = 0; j < 50000; j++) {
        sum += i*j;
    }
}
System.out.println(sum);
    
long afterTime = System.currentTimeMillis(); 
long secDiffTime = (afterTime - beforeTime)/1000;
System.out.println("시간차이(m) : "+secDiffTime);




- 출력 결과 -

1636142336 

시간차이(m) : 19

Posted by 꿈만은공돌
,