この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Stopwatch クラス

 

公開日: 2016年10月

経過時間を正確に計測するために使用できる一連のメソッドとプロパティを提供します。

この型の .NET Framework ソース コードを参照するを参照してください。、 Reference Sourceします。

名前空間:   System.Diagnostics
アセンブリ:  System (System.dll 内)

System.Object
  System.Diagnostics.Stopwatch

public class Stopwatch

名前説明
System_CAPS_pubmethodStopwatch()

Stopwatch クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyElapsed

現在のインスタンスで計測された経過時間の合計を取得します。

System_CAPS_pubpropertyElapsedMilliseconds

現在のインスタンスで計測された経過時間の合計を取得します (ミリ秒単位)。

System_CAPS_pubpropertyElapsedTicks

現在のインスタンスで計測された経過時間の合計を取得します (タイマー刻み)。

System_CAPS_pubpropertyIsRunning

Stopwatch タイマーが実行中かどうかを示す値を取得します。

名前説明
System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodSystem_CAPS_staticGetTimestamp()

タイマー機構の現在のタイマー刻み数を取得します。

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodReset()

タイマー間隔の計測を停止して、経過時間をゼロにリセットします。

System_CAPS_pubmethodRestart()

時間間隔の計測を停止し、経過時間をゼロにリセットして、経過時間の計測を開始します。

System_CAPS_pubmethodStart()

間隔の経過時間の計測を開始または再開します。

System_CAPS_pubmethodSystem_CAPS_staticStartNew()

新しい Stopwatch インスタンスを初期化して、経過時間のプロパティをゼロに設定し、経過時間の計測を開始します。

System_CAPS_pubmethodStop()

間隔の経過時間の計測を停止します。

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

名前説明
System_CAPS_pubfieldSystem_CAPS_staticFrequency

1 秒あたりのタイマー刻みの数として、タイマーの頻度を取得します。 このフィールドは読み取り専用です。

System_CAPS_pubfieldSystem_CAPS_staticIsHighResolution

タイマーが高解像力のパフォーマンス カウンターに基づいているかどうかを示します。 このフィールドは読み取り専用です。

System_CAPS_noteメモ

この型の .NET Framework ソース コードを参照してください、 Reference Sourceします。 ソース コードをオンラインで参照、オフライン表示のリファレンスをダウンロードおよびデバッグ中にソース (パッチや更新を含む) をステップsee instructions.

A Stopwatch インスタンスは複数の間隔の間で 2 つの間隔の経過時間の合計経過時間を測定することができます。 一般的な Stopwatch シナリオを呼び出す、 Start メソッド、最終的に呼び出す、 Stop メソッド、および、確認の経過時間を使用して、 Elapsed プロパティです。

A Stopwatch インスタンスは実行中または停止。 使用 IsRunning の現在の状態を判断する Stopwatchです。 使用して Start ; の経過時間の測定を開始する使用 Stop 経過時間の計測を停止します。 プロパティを使用した経過時間の値をクエリ Elapsed, 、ElapsedMilliseconds, 、または ElapsedTicksです。 インスタンスが実行中または停止時に、経過時間のプロパティを照会できます。 プロパティが順調に増加する経過時間中に、 Stopwatch が実行されている一定に保たれるインスタンスを停止します。

既定では、経過時間の値、 Stopwatch のインスタンスが等しいすべての測定された時間間隔の合計です。 各呼び出し Start 累積の経過時間でのカウントを開始の各呼び出し Stop 現在の間隔の計測を終了し、経過時間の累積値を固定します。 使用して、 Reset 、既存の累積的な経過時間を消去するメソッドを Stopwatch インスタンス。

Stopwatch 基になるタイマー機構のタイマー刻みをカウントして、経過時間を測定します。 インストールされているハードウェアとオペレーティング システム、高解像度のパフォーマンス カウンターをサポートする場合、 Stopwatch クラスでは、そのカウンターを使用して、経過時間の測定をします。 それ以外の場合、 Stopwatch クラスでは、システムのタイマーを使用して、経過時間を測定します。 使用して、 FrequencyIsHighResolution 、有効桁数と解決策を決定するフィールド、 Stopwatch タイミング実装します。

Stopwatch クラスのマネージ コード内でのタイミングに関連するパフォーマンス カウンターの操作を支援します。 具体的には、 Frequency フィールドと GetTimestamp メソッドは、アンマネージ Win32 Api の代わりに使用できる QueryPerformanceFrequencyQueryPerformanceCounterです。

System_CAPS_noteメモ

マルチプロセッサ コンピューターで必要に、スレッドが実行されているプロセッサはありません。 ただし、BIOS でハードウェア アブストラクション レイヤー (HAL) のバグのためには、各プロセッサにさまざまなタイミングの結果を取得できます。 スレッドのプロセッサ アフィニティを指定するには、使用、 ProcessThread.ProcessorAffinity メソッドです。

次の例では、使用して、 Stopwatch クラスをアプリケーションの実行時間を決定します。

using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
        Thread.Sleep(10000);
        stopWatch.Stop();
        // Get the elapsed time as a TimeSpan value.
        TimeSpan ts = stopWatch.Elapsed;

        // Format and display the TimeSpan value.
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
        Console.WriteLine("RunTime " + elapsedTime);
    }
}

次の例では、使用、 Stopwatch パフォーマンス データを計算するクラス。

using System;
using System.Diagnostics;

namespace StopWatchSample
{
    class OperationsTimer
    {
        public static void Main()
        {
            DisplayTimerProperties();

            Console.WriteLine();
            Console.WriteLine("Press the Enter key to begin:");
            Console.ReadLine();
            Console.WriteLine();

            TimeOperations();
        }

        public static void DisplayTimerProperties()
        {
            // Display the timer frequency and resolution.
            if (Stopwatch.IsHighResolution)
            {
                Console.WriteLine("Operations timed using the system's high-resolution performance counter.");
            }
            else 
            {
                Console.WriteLine("Operations timed using the DateTime class.");
            }

            long frequency = Stopwatch.Frequency;
            Console.WriteLine("  Timer frequency in ticks per second = {0}",
                frequency);
            long nanosecPerTick = (1000L*1000L*1000L) / frequency;
            Console.WriteLine("  Timer is accurate within {0} nanoseconds", 
                nanosecPerTick);
        }

        private static void TimeOperations()
        {
            long nanosecPerTick = (1000L*1000L*1000L) / Stopwatch.Frequency;
            const long numIterations = 10000;

            // Define the operation title names.
            String [] operationNames = {"Operation: Int32.Parse(\"0\")",
                                           "Operation: Int32.TryParse(\"0\")",
                                           "Operation: Int32.Parse(\"a\")",
                                           "Operation: Int32.TryParse(\"a\")"};


            // Time four different implementations for parsing 
            // an integer from a string. 

            for (int operation = 0; operation <= 3; operation++)
            {
                // Define variables for operation statistics.
                long numTicks = 0;
                long numRollovers = 0;
                long maxTicks = 0;
                long minTicks = Int64.MaxValue;
                int indexFastest = -1;
                int indexSlowest = -1;
                long milliSec = 0;

                Stopwatch time10kOperations = Stopwatch.StartNew();

                // Run the current operation 10001 times.
                // The first execution time will be tossed
                // out, since it can skew the average time.

                for (int i=0; i<=numIterations; i++) 
                {
                    long ticksThisTime = 0;
                    int inputNum;
                    Stopwatch timePerParse;

                    switch (operation)
                    {
                        case 0:
                            // Parse a valid integer using
                            // a try-catch statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            try 
                            {
                                inputNum = Int32.Parse("0");
                            }
                            catch (FormatException)
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.

                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 1:
                            // Parse a valid integer using
                            // the TryParse statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            if (!Int32.TryParse("0", out inputNum))
                            { 
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 2:
                            // Parse an invalid value using
                            // a try-catch statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            try 
                            {
                                inputNum = Int32.Parse("a");
                            }
                            catch (FormatException)
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 3:
                            // Parse an invalid value using
                            // the TryParse statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            if (!Int32.TryParse("a", out inputNum))
                            { 
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;

                        default:
                            break;
                    }

                    // Skip over the time for the first operation,
                    // just in case it caused a one-time
                    // performance hit.
                    if (i == 0)
                    {
                        time10kOperations.Reset();
                        time10kOperations.Start();
                    }
                    else 
                    {

                        // Update operation statistics
                        // for iterations 1-10001.
                        if (maxTicks < ticksThisTime)
                        {
                            indexSlowest = i;
                            maxTicks = ticksThisTime;
                        }
                        if (minTicks > ticksThisTime)
                        {
                            indexFastest = i;
                            minTicks = ticksThisTime;
                        }
                        numTicks += ticksThisTime;
                        if (numTicks < ticksThisTime)
                        {
                            // Keep track of rollovers.
                            numRollovers ++;
                        }
                    }
                }  

                // Display the statistics for 10000 iterations.

                time10kOperations.Stop();
                milliSec = time10kOperations.ElapsedMilliseconds;

                Console.WriteLine();
                Console.WriteLine("{0} Summary:", operationNames[operation]);
                Console.WriteLine("  Slowest time:  #{0}/{1} = {2} ticks",
                    indexSlowest, numIterations, maxTicks);
                Console.WriteLine("  Fastest time:  #{0}/{1} = {2} ticks",
                    indexFastest, numIterations, minTicks);
                Console.WriteLine("  Average time:  {0} ticks = {1} nanoseconds", 
                    numTicks / numIterations, 
                    (numTicks * nanosecPerTick) / numIterations );
                Console.WriteLine("  Total time looping through {0} operations: {1} milliseconds", 
                    numIterations, milliSec);
            }
        }
     }
}

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
2.0 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: