소프트웨어의 실행 속도는 사용자가 허용할 수 있는 범위 내에 있어야 합니다. 수명이 짧지만 자주 사용되는 루틴의 속도를 향상시키면 소프트웨어의 전체 속도가 크게 향상되는 경우가 많습니다.
물론 속도를 높이려면 먼저 시간을 측정할 수 있어야 합니다. 그럼 트랙의 상황을 생각해 봅시다. 총소리가 들리자마자 스톱워치를 눌러 타이밍을 시작하고, 선수가 결승선에 도달하면 타이밍을 종료합니다. 이때 선수가 사용한 시간을 알 수 있습니다. . 다음 라운드를 시작하기 전에 스톱워치를 0으로 재설정해야 합니다. .NET2.0은 또한 시간을 더 정확하게 측정할 수 있는 Stopwatch 클래스와 같은 스톱워치를 제공합니다.
속도 테스트:
소프트웨어 성능과 테스트 가능성은 복잡한 주제입니다. 애플리케이션이 사용자 기대를 충족하는지 확인하려면 개발 주기 동안 애플리케이션의 성능과 테스트 가능성을 고려해야 합니다. 이는 디자인 단계에서 매우 중요합니다. 디자인이 좋지 않으면 사용자 경험도 좋지 않을 것이 거의 확실합니다. 그러나 좋은 디자인만으로는 프로그램이 효율적으로 실행된다는 보장이 없으며 최종 코드의 품질도 마찬가지로 중요합니다.
장기 실행 루틴을 측정하는 것은 매우 간단합니다. 프로세스가 몇 분 동안 지속되면 시계를 사용하여 시간을 기록할 수 있습니다. 예를 들어, 실행하는 데 2분이 걸리는 프로세스의 경우 10% 개선하면 12초를 절약할 수 있으며 이는 쉽게 결정할 수 있습니다.
그리고 매우 단기적인 프로세스를 측정하려면 더 나은 정확도를 고려해야 합니다. 예를 들어, 실행하는 데 1000분의 1초밖에 걸리지 않지만 누적 효과는 100만 번 호출되는 매우 작은 루틴이 있습니다. 이전 버전의 .NET Framework에서는 Windows API 함수를 사용해야 했고, .NET Framework 2.0에서는 Microsoft가 시간 측정 작업을 단순화하기 위해 Stopwatch(저희 스톱워치) 클래스를 도입했습니다.
스톱워치 수업:
Stopwatch 클래스를 사용하여 시간을 측정하는 것은 매우 간단합니다. 실제 생활의 스톱워치와 마찬가지로 이 클래스의 객체도 카운터를 시작하고 중지하고 0으로 돌아갈 수 있지만 일반 스톱워치보다 훨씬 더 정확합니다(즉, 수백만 초). .
샘플 코드:
Stopwatch의 사용법을 보여주기 위해 코드를 사용해 보겠습니다. 다음은 100만에서 100만 사이의 모든 정수를 누적하는 콘솔 애플리케이션입니다.
System
네임스페이스 StopWatchClass
사용
{
수업 프로그램
{
정적 무효 Main(string[] args)
{
긴 총계 = 0;
for (int i = 1; i <= 10000000; i++)
{
합계 += i;
}
}
}
}
스톱워치 개체 추가:
Stopwatch 클래스는 System.Diagnostics 네임스페이스에 있습니다. 객체를 추가한 후의 코드는 다음과 같습니다.
시스템 사용;
System.Diagnostics
네임스페이스 StopWatchClass
사용
{
수업 프로그램
{
정적 무효 Main(string[] args)
{
스톱워치 타이머 = new Stopwatch();
긴 총계 = 0;
for (int i = 1; i <= 10000000; i++)
{
합계 += i;
}
}
}
}
Stopwatch 개체를 제어합니다.
Stopwatch는 Stopwatch 개체를 제어하는 여러 가지 방법을 제공합니다. Start 메서드는 타이밍 작업을 시작하고 Stop 메서드는 타이밍을 중지합니다. 이때 두 번째로 Start 메소드를 사용하면 timing이 계속되며 최종 timing 결과는 두 timing의 누적이 됩니다. 이러한 상황을 방지하려면 Reset 메서드를 사용하여 두 번째 타이머 전에 개체를 0으로 재설정하십시오. 이 세 가지 방법 중 어느 것도 매개변수가 필요하지 않습니다. 코드는 다음과 같습니다
시스템 사용;
System.Diagnostics
네임스페이스 StopWatchClass
사용
{
수업 프로그램
{
정적 무효 Main(string[] args)
{
스톱워치 타이머 = new Stopwatch();
긴 총계 = 0;
타이머.시작();
for (int i = 1; i <= 10000000; i++)
{
합계 += i;
}
타이머.정지();
}
}
}
스톱워치 결과 읽기:
<!--[if !supportLists]--><!--[endif]--> 타이밍을 종료한 후 다음 단계는 타이밍 결과를 읽는 것입니다. Stopwatch 클래스는 다음 속성을 제공합니다.
<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->
경과됨: 시간 간격을 나타내는 TimeSpan 개체를 반환합니다.
ElapsedMilliseconds: 타이밍이 통과한 마이크로초 수를 반환합니다. 정확도는 약간 낮으므로 약간 더 긴 타이밍에 적합합니다.
ElapsedTicks: 경과된 타이머 틱 수를 반환합니다. 타이머 틱은 스톱워치 개체에 대해 가능한 가장 작은 측정 단위입니다. 타이머 틱의 길이는 특정 컴퓨터와 운영 체제에 따라 결정됩니다. Stopwatch 객체의 Frequency 정적 필드 값은 1초에 포함된 타이머 틱 수를 나타냅니다. TimeSpan의 Ticks 속성에 사용되는 시간 단위의 차이에 유의하세요.
타이밍 작업에 따라 이러한 속성 중 하나를 선택해야 합니다. 예제 프로그램에서 Elapsed 속성은 경과된 마이크로초 수를 출력하는 데 필요한 정밀도를 제공합니다. 이는 TimeSpan의 최고 정확도이기도 합니다.
최종 프로그램 코드는 다음과 같습니다.
시스템 사용;
System.Diagnostics
네임스페이스 StopWatchClass
사용
{
수업 프로그램
{
정적 무효 Main(string[] args)
{
스톱워치 타이머 = new Stopwatch();
긴 총계 = 0;
타이머.시작();
for (int i = 1; i <= 10000000; i++)
{
합계 += i;
}
타이머.정지();
십진수 마이크로 = 타이머.Elapsed.Ticks / 10m;
Console.WriteLine("실행 시간은 {0:F1} 마이크로초였습니다.", micro);
}
}
}
또한 IsRunning 속성을 사용하여 Stopwatch 인스턴스의 타이밍이 맞는지 확인하고 StartNew 메서드를 사용하여 새 타이머를 시작합니다.