カテゴリ: C# 更新日: 2026/03/04

C#で経過時間を計測する方法を完全ガイド!初心者でもわかるStopwatchクラス入門

C#で経過時間を計測する方法(Stopwatchクラス)
C#で経過時間を計測する方法(Stopwatchクラス)

先生と生徒の会話形式で理解しよう

生徒

「プログラムの処理が終わるまでにどれくらい時間がかかっているか知りたいんですが、どうすれば計測できますか?」

先生

「C#には、処理の経過時間を正確に測るためのStopwatchという便利な仕組みがありますよ。」

生徒

「ストップウォッチって、手で時間を測るあのストップウォッチですか?プログラムでそんなことできるんですね!」

先生

「そうなんです。名前の通り、プログラムの中にストップウォッチを用意して、Startで測り始めてStopで止める仕組みです。では一緒に使い方を見ていきましょう。」

1. Stopwatchクラスとは?

1. Stopwatchクラスとは?
1. Stopwatchクラスとは?

C#のStopwatchクラスは、プログラムの中で経過時間を測定するための専用ツールです。たとえば、「データの読み込みに何秒かかったか」「計算処理がどれくらい時間を使っているか」を調べたいときに役立ちます。

Stopwatchは、キッチンタイマーやスマホのストップウォッチと同じで、スタートしてストップするだけのシンプルな仕組みです。難しい設定をしなくても、簡単に経過時間を確認できます。

Stopwatchが特に便利なのは、単純に時間を見るだけでなく、ミリ秒単位の細かい時間まで測れることです。これはパソコンがとても高速で処理を行うため、少しの時間でも正確に測る必要があるからです。

2. Stopwatchを使った基本的な計測方法

2. Stopwatchを使った基本的な計測方法
2. Stopwatchを使った基本的な計測方法

まずは、Stopwatchを使ったもっとも基本的なサンプルから見ていきましょう。実際のプログラムで時間を測るには、以下の流れで使います。

  • Stopwatchのインスタンスを作る
  • Startメソッドで計測開始
  • 何かの処理を行う
  • Stopメソッドで計測終了
  • Elapsedプロパティで経過時間を確認

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        Stopwatch sw = new Stopwatch();

        sw.Start();

        // 計測したい処理
        for (int i = 0; i < 1000000; i++)
        {
            int x = i * 2;
        }

        sw.Stop();

        Console.WriteLine($"経過時間: {sw.ElapsedMilliseconds}ミリ秒");
    }
}

上のコードでは、100万回の計算を行うのにかかった時間をミリ秒で表示しています。

たとえば実行結果は次のようになります。


経過時間: 12ミリ秒

3. Elapsed・ElapsedMilliseconds・ElapsedTicksの違い

3. Elapsed・ElapsedMilliseconds・ElapsedTicksの違い
3. Elapsed・ElapsedMilliseconds・ElapsedTicksの違い

Stopwatchには、計測した時間を取り出すためのいくつかのプロパティがあります。初心者の方はまず「ElapsedMilliseconds」だけでも問題ありませんが、それぞれの違いを知っておくとより便利に使えます。

● Elapsed

TimeSpanで経過時間を返す仕組みです。時間・分・秒をまとめて扱いたいときに便利です。

● ElapsedMilliseconds

ミリ秒(1秒=1000ミリ秒)単位で時間を取得します。多くの処理時間計測はこれで十分です。

● ElapsedTicks

Tick(ティック)というもっと細かい単位で時間を扱う方法です。Tickは時間の最小単位で、Stopwatch内部の精度によって決まります。通常の用途ではあまり使いません。

4. 計測をリセットする方法

4. 計測をリセットする方法
4. 計測をリセットする方法

StopwatchにはResetメソッドがあり、これを使うと経過時間をリセットしてゼロの状態に戻せます。連続して時間を測るときなどに役立ちます。


Stopwatch sw = new Stopwatch();

sw.Start();
// 何かの処理
sw.Stop();

Console.WriteLine(sw.ElapsedMilliseconds);

// リセットして再測定
sw.Reset();
sw.Start();
// 別の処理
sw.Stop();

Console.WriteLine(sw.ElapsedMilliseconds);

5. using System.Diagnostics が必要な理由

5. using System.Diagnostics が必要な理由
5. using System.Diagnostics が必要な理由

Stopwatchクラスは、C#の中でもSystem.Diagnosticsという性能測定やログ関連の機能をまとめた場所にあります。そのため、Stopwatchを使うときは必ずプログラムの先頭に次の一行を追加する必要があります。


using System.Diagnostics;

これは「Stopwatchを使いますよ」とC#に教えるための宣言です。もし書き忘れると、Stopwatchが存在しないというエラーになってしまいます。

6. 処理の最適化やパフォーマンス改善にも役立つ

6. 処理の最適化やパフォーマンス改善にも役立つ
6. 処理の最適化やパフォーマンス改善にも役立つ

Stopwatchは学習のためだけでなく、実際の開発でもとてもよく使われます。なぜなら、プログラムの速度を確認して改善するパフォーマンスチューニングに欠かせないからです。

たとえば、「Aという書き方とBという書き方のどちらが速いか」といった比較をするときに、Stopwatchで計測すればすぐに違いが分かります。これは、快適に動くアプリを作るうえでとても大事なポイントです。

まとめ

まとめ
まとめ

ここまでC#における時間計測の基本、Stopwatchクラスの使い方について詳しく解説してきました。プログラムの実行速度を客観的な数値で把握することは、単に「なんとなく遅い気がする」という感覚を、「〇ミリ秒かかっている」という正確な事実に変換してくれます。これは開発現場において、非常に重要なステップです。

C#でのパフォーマンス計測が重要な理由

現代のソフトウェア開発において、スピードはユーザー満足度に直結します。特にWebアプリのレスポンスや、大量のデータを処理するバッチプログラムなど、1秒の遅延が大きな損失につながることも珍しくありません。C#は非常に高速な言語ですが、書き方ひとつで処理速度は大きく変わります。

例えば、ループ処理の中で不必要なオブジェクト生成を行っていないか、あるいはより効率的なアルゴリズムが存在しないか。これらを判断する唯一の基準が「実測値」です。Stopwatchクラスを活用することで、ボトルネック(処理が滞っている箇所)を特定し、ピンポイントで最適化を行うことが可能になります。

実践:より高度な計測テクニック

記事の本編では基本的な計測方法を紹介しましたが、実際の開発では「一度計測を止めてから、再度再開したい」という場面もあります。そんな時はRestart()メソッドが便利です。Reset()Start()を同時に行うようなイメージで、コードをよりスッキリ記述できます。

また、静的メソッドであるStopwatch.StartNew()を使うと、インスタンスの生成と計測開始を一行で済ませることもできます。以下のサンプルプログラムで、これらのおさらいをしてみましょう。


using System;
using System.Diagnostics;
using System.Threading;

class PerformanceTest
{
    static void Main()
    {
        Console.WriteLine("計測を開始します...");

        // StartNewを使うと生成と同時に開始されます
        Stopwatch sw = Stopwatch.StartNew();

        // 模擬的な重い処理(500ミリ秒待機)
        Thread.Sleep(500);

        sw.Stop();
        Console.WriteLine($"処理1の経過時間: {sw.ElapsedMilliseconds}ms");

        // Restartを使ってリセット&再開始
        sw.Restart();

        // 別の重い処理(300ミリ秒待機)
        Thread.Sleep(300);

        sw.Stop();
        Console.WriteLine($"処理2の経過時間: {sw.ElapsedMilliseconds}ms");

        // 最終的なTimeSpanでの表示
        TimeSpan ts = sw.Elapsed;
        Console.WriteLine($"最終計測結果: {ts.Seconds}秒 {ts.Milliseconds}ミリ秒");
    }
}

実行結果は、以下のように出力されます。Thread.Sleepを使用しているため、指定した時間に近い数値が表示されるはずです。


計測を開始します...
処理1の経過時間: 500ms
処理2の経過時間: 300ms
最終計測結果: 0秒 300ミリ秒

SEOの観点から見たC#プログラミング学習

C#や.NET Framework(.NET Core / .NET 5以降含む)を学ぶ際、こうした計測ツールを使いこなせるようになると、初心者から中級者へのステップアップがスムーズになります。プログラミングのスキルアップには、コードを書いて動かすだけでなく、「自分の書いたコードがコンピュータ上でどのように振る舞っているか」を観察する姿勢が欠かせません。

Visual StudioなどのIDE(統合開発環境)には、より詳細なプロファイリングツールも備わっていますが、まずは手軽に使えるStopwatchクラスから慣れていくのがベストです。デバッグ時やログ出力時に経過時間を添えるだけで、問題解決のスピードが劇的に向上するでしょう。

先生と生徒の振り返り会話

生徒

「先生、Stopwatchクラスを使ってみたら、自分の書いたコードのどこが一番時間がかかっているかハッキリ分かりました!今まで勘で修正していたのが恥ずかしいです…。」

先生

「それは大きな進歩ですね。プログラミングにおいて『推測するな、計測せよ』という格言があるくらい、実測は大切なんですよ。ちなみに、さっきのサンプルコードに出てきたThread.Sleepはどう感じましたか?」

生徒

「わざとプログラムを止める命令ですよね。テストで時間を測る時にはすごく便利だと思いました。あと、sw.Elapsedを使うと、ミリ秒だけじゃなくて『〇分〇秒』みたいに分かりやすく表示できるのもいいですね。」

先生

「その通りです。TimeSpan型を使えば書式設定も自由自在ですからね。そうそう、もしももっと古い言語、例えばCOBOLなどで同じように時間を測りたい場合は、OSの機能や特殊なレジスタを使う必要があるんですが、C#ならクラス一つで完結します。便利でしょう?」

生徒

「COBOLの話はちょっと難しそうですが、C#が恵まれているのは分かりました(笑)。これからは、大きい処理を作るたびにStopwatchで健康診断みたいにタイムを測ってみることにします!」

先生

「いい心がけです。ミリ秒単位の短縮が、積み重なって最高のユーザー体験を生みます。ぜひ、効率的なプログラムを書けるエンジニアを目指して頑張りましょうね。」

カテゴリの一覧へ
新着記事
New1
Azure
Azure SQL Databaseのリードスケールアウトとは?参照負荷分散でパフォーマンスを高速化する方法
New2
C#
C#プログラムの実行方法まとめ!Visual Studio・コマンドライン・.NET CLIの使い方
New3
C#
C#でHello Worldを表示する方法を完全ガイド!初心者でも1行から始められる入門講座
New4
COBOL
Micro Focus COBOLの特徴と使い方を徹底解説!初心者でもわかるIDE活用法
人気記事
No.1
Java&Spring記事人気No1
Azure
Azure Bastionの使い方を徹底解説!踏み台サーバー不要で安全にRDP/SSH接続
No.2
Java&Spring記事人気No2
C#
C#のプロパティとは?get/setアクセサの書き方と使い分け
No.3
Java&Spring記事人気No3
C#
C#のデリゲートとは?メソッドを変数のように扱う基本を解説
No.4
Java&Spring記事人気No4
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!
No.5
Java&Spring記事人気No5
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.6
Java&Spring記事人気No6
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.7
Java&Spring記事人気No7
C#
C#の日付型(DateTime)と基本的な使い方を解説|初心者向け入門ガイド
No.8
Java&Spring記事人気No8
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本