ソフトウェアの実行速度は、ユーザーが許容できる範囲内である必要があります。多くの場合、有効期間は短いが頻繁に使用されるルーチンの速度を向上させると、ソフトウェア全体の速度が大幅に向上します。
もちろん、速度を向上させるには、まず時間を測定できるようにする必要があります。さて、それではトラック上の状況を考えてみましょう。号砲が鳴ったらすぐにストップウォッチを押して計測を開始し、プレイヤーがゴールに到達した時点で計測を終了します。この時点でプレイヤーが費やした時間を知ることができます。 。次のラウンドを開始する前に、ストップウォッチをゼロにリセットする必要があります。 .NET2.0 では、より正確に時間を測定できるストップウォッチ: Stopwatch クラスも提供しています。
スピードテスト:
ソフトウェアのパフォーマンスとテスト容易性は複雑なトピックです。アプリケーションがユーザーの期待に応えられるようにするには、開発サイクル中にアプリケーションのパフォーマンスとテスト容易性を考慮する必要があります。これは設計段階で非常に重要であり、設計が不十分だとほぼ確実にユーザー エクスペリエンスの低下につながります。ただし、優れた設計だけではプログラムが効率的に実行されることは保証されません。最終コードの品質も同様に重要です。
長時間実行されるルーチンの測定は非常に簡単です。プロセスが数分間続く場合は、時計を使用して時間を記録できます。たとえば、実行に 2 分かかるプロセスの場合、10% 改善すると 12 秒節約できますが、これは簡単に判断できます。
また、非常に短期間のプロセスを測定したい場合は、より高い精度を考慮する必要があります。たとえば、実行にかかる時間はわずか 1,000 分の 1 秒であるにもかかわらず、100 万回呼び出される非常に小さなルーチンがいくつかあり、その累積的な影響は明らかです。 .NET Framework の以前のバージョンでは、Windows API 関数を使用する必要がありました。.NET Framework 2.0 では、Microsoft は時間測定タスクを簡素化するために Stopwatch (当社のストップウォッチです) クラスを導入しました。
ストップウォッチ クラス:
Stopwatch クラスを使用して時間を測定するのは非常に簡単です。現実のストップウォッチと同様に、このクラスのオブジェクトもカウンターを開始、停止、ゼロに戻す (リセット) ことができますが、通常のストップウォッチよりもはるかに正確であり、マイクロ秒 (つまり、数百万秒) 単位の精度が得られます。 .1秒未満)。
サンプルコード:
ストップウォッチの使用法を示すために、コードを使用してみましょう。以下は、1 から 100 万までのすべての整数を累積するコンソール アプリケーションです。
システムの
名前空間 StopWatchClass を
使用します。
{
クラスプログラム
{
static void Main(string[] args)
{
長い合計 = 0;
for (int i = 1; i <= 10000000; i++)
{
合計 += i;
}
}
}
}
ストップウォッチ オブジェクトを追加します。
Stopwatch クラスは System.Diagnostics 名前空間にあります。オブジェクトを追加した後のコードは次のとおりです。
システムを使用する;
System.Diagnostics
名前空間 StopWatchClass
を使用します。
{
クラスプログラム
{
static void Main(string[] args)
{
ストップウォッチ タイマー = new Stopwatch();
長い合計 = 0;
for (int i = 1; i <= 10000000; i++)
{
合計 += i;
}
}
}
}
ストップウォッチ オブジェクトを制御します。
Stopwatch には、Stopwatch オブジェクトを制御するためのメソッドがいくつか用意されています。 Start メソッドはタイミング操作を開始し、Stop メソッドはタイミングを停止します。このとき、Start メソッドが 2 回目に使用されると、計時は継続され、最終的な計時結果は 2 回の計時結果の累積になります。この状況を回避するには、2 番目のタイマーの前に Reset メソッドを使用してオブジェクトをゼロにリセットします。これら 3 つのメソッドはいずれもパラメーターを必要としません。コードは次のとおりです。
システムを使用する;
System.Diagnostics
名前空間 StopWatchClass
を使用します。
{
クラスプログラム
{
static void Main(string[] args)
{
ストップウォッチ タイマー = new Stopwatch();
長い合計 = 0
;
for (int i = 1; i <= 10000000; i++)
{
合計 += i;
timer.Stop
();
}
}
}
ストップウォッチの結果を読み取る:
<!--[if !supportLists]--><!--[endif]--> タイミングを終了したら、次のステップはタイミング結果を読み取ることです。 Stopwatch クラスは次のプロパティを提供します。
<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->
Elapsed: タイミング間隔を表す TimeSpan オブジェクトを返します。
ElapsedMilliseconds: タイミングによって経過したマイクロ秒数を返します。精度はわずかに低く、わずかに長いタイミングに適しています。
ElapsedTicks: 経過したタイマーティック数を返します。タイマー ティックは、ストップウォッチ オブジェクトの最小測定単位です。タイマーの刻みの長さは、特定のコンピューターとオペレーティング システムによって決まります。 Stopwatch オブジェクトの Frequency 静的フィールドの値は、1 秒間に含まれるタイマー ティック数を表します。 TimeSpan の Ticks プロパティで使用される時間単位の違いに注目してください。
これらのプロパティの 1 つは、タイミング タスクに基づいて選択する必要があります。このサンプル プログラムでは、Elapsed プロパティは、経過したマイクロ秒数を出力するために必要な精度を提供します。これは TimeSpan の最高の精度でもあります。
最終的なプログラムコードは次のとおりです。
システムを使用する;
System.Diagnostics
名前空間 StopWatchClass
を使用します。
{
クラスプログラム
{
static void Main(string[] args)
{
ストップウォッチ タイマー = new Stopwatch();
長い合計 = 0
;
for (int i = 1; i <= 10000000; i++)
{
合計 += i;
timer.Stop
();
10 進数のマイクロ = timer.Elapsed.Ticks / 10m;
Console.WriteLine("実行時間は {0:F1} マイクロ秒でした。", micro);
}
}
}
さらに、IsRunning プロパティを使用してストップウォッチ インスタンスがタイミングを計っているかどうかを確認し、StartNew メソッドを使用して新しいタイマーを開始します。