C#でメソッドの実行時間を計測するテクニックを紹介!初心者でも簡単に理解できる
生徒
「先生、C#でプログラムの処理時間ってどうやって調べるんですか?」
先生
「いい質問ですね。処理時間を測るには『ストップウォッチ』を使うのが基本です。」
生徒
「ストップウォッチって、あの時間をはかるやつですか?」
先生
「そうです!C#には、時間計測のための専用のクラスが用意されているので、とても簡単に使えますよ。」
1. ストップウォッチで実行時間を計測しよう
C#では、System.Diagnosticsという機能の中にあるStopwatchクラスを使って、メソッドの実行時間を簡単に計測できます。
ストップウォッチは、時間をスタートしてから止めるまでの経過時間を記録します。私たちが日常で使うストップウォッチと同じイメージです。
では、C#でストップウォッチを使って、メソッドの処理時間を測るプログラムを作ってみましょう。
2. サンプルプログラムで実行時間を測ってみよう
以下の例では、100万回ループする処理の実行時間を計測します。
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
Stopwatch stopwatch = new Stopwatch();
// ストップウォッチをスタート
stopwatch.Start();
// 処理したいメソッド
DoSomething();
// ストップウォッチをストップ
stopwatch.Stop();
// 経過時間を表示(ミリ秒単位)
Console.WriteLine($"処理にかかった時間: {stopwatch.ElapsedMilliseconds}ミリ秒");
}
static void DoSomething()
{
long total = 0;
for (int i = 0; i < 1000000; i++)
{
total += i;
}
}
}
このプログラムでは、Stopwatchクラスを使って、DoSomething()メソッドの処理時間をミリ秒単位で表示しています。
処理にかかった時間: 5ミリ秒
※実行結果はパソコンの性能によって変わります。
3. Stopwatchクラスとは?
Stopwatch(ストップウォッチ)クラスは、C#の標準ライブラリのひとつで、正確な時間を測るための機能が備わっています。
主に以下のメソッドやプロパティがあります:
Start():時間の計測を開始Stop():計測を停止ElapsedMilliseconds:経過した時間をミリ秒で取得Reset():時間をリセット(0に戻す)
このように、ストップウォッチはとてもシンプルで便利なクラスです。
4. よくある初心者のつまずきポイント
初心者が実行時間の計測でよくつまずくポイントをいくつか紹介します。
- Stopwatchの使い方を忘れる:
Start()とStop()の順番が大切です。 - 名前空間の指定漏れ:
using System.Diagnostics;を書かないとStopwatchが使えません。 - 計測範囲が広すぎる:無関係な処理も一緒に計測してしまうと、正しい時間が測れません。
5. もう一歩!タイマー感覚で使える応用例
ストップウォッチを使えば、複数のメソッドの処理時間を比較することもできます。
例えば、処理Aと処理Bのどちらが速いかを比べたい場合、それぞれにストップウォッチを使って測ればすぐに分かります。
Stopwatch sw = new Stopwatch();
// 処理Aの計測
sw.Start();
ProcessA();
sw.Stop();
Console.WriteLine($"処理A: {sw.ElapsedMilliseconds}ミリ秒");
// 処理Bの計測
sw.Reset();
sw.Start();
ProcessB();
sw.Stop();
Console.WriteLine($"処理B: {sw.ElapsedMilliseconds}ミリ秒");
このようにして、プログラムの最適化(効率化)にも役立てることができます。
6. なぜ処理時間の計測が大切なのか?
プログラムは、「正しく動くこと」も大事ですが、「速く動くこと」もとても大事です。
たとえば、ゲームやアプリ、ウェブサービスなどでは、処理のスピードがユーザーの満足度に大きく関係します。
そのため、処理がどれくらい時間がかかっているのかを測ることができれば、無駄な部分を見つけて改善することができます。
これが「実行時間の計測」の重要な役割なのです。
まとめ
C#でメソッドの実行時間を計測する方法として、Stopwatchクラスを使うテクニックは非常にシンプルで効果的です。プログラムのパフォーマンスを把握するためには、こうした時間計測の手段を知っておくことが欠かせません。特に初心者にとっては、「何が重くて」「どこが遅いのか」を可視化できることが、学習の大きな助けになります。
記事内で紹介したStopwatchクラスは、Start()とStop()の二つのメソッドを中心に使いながら、ElapsedMillisecondsプロパティで時間を取得するという非常に分かりやすい構造です。また、必要に応じてReset()を使えば、連続して処理時間を測ることもできるため、複数の処理の比較にも役立ちます。
実際にコードを書くときには、測りたい処理だけを正確に囲むことが重要です。無関係な処理まで含めてしまうと、正確な実行時間が測れなくなってしまうため注意が必要です。さらに、System.Diagnosticsのusingを忘れるとエラーになる点も、初心者がよくつまずくポイントのひとつです。
それでは、今回学んだ内容を応用したサンプルコードをもう一つ紹介しておきましょう。これは、繰り返し処理の回数を変えて、実行時間がどう変わるかを調べる簡単な実験プログラムです。
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
TestLoop(100000);
TestLoop(1000000);
TestLoop(10000000);
}
static void TestLoop(int count)
{
Stopwatch sw = new Stopwatch();
sw.Start();
long total = 0;
for (int i = 0; i < count; i++)
{
total += i;
}
sw.Stop();
Console.WriteLine($"ループ回数: {count} → 所要時間: {sw.ElapsedMilliseconds}ミリ秒");
}
}
このように、ループ回数を増やすことで、処理時間がどのように増加するかを確認できます。パフォーマンスの感覚を養うにはとても良い練習になります。また、現場での開発でも「この関数は遅いな」と感じたときに、すぐに計測して確かめられると、原因の切り分けや対策がスムーズになります。
実行時間の計測は、開発者にとって「見えない問題」を数値化するための大切な道具です。初めのうちは目に見えた変化がなくても、より大きなプログラムやデータ量が多い処理になってくると、少しの差がユーザー体験に大きな影響を与えます。だからこそ、こうしたツールを使って定期的に見直す姿勢を持つことが大切です。
生徒
「処理の速さって、目に見えないからあまり気にしてなかったんですが、測ってみるとすごく面白いですね!」
先生
「その気づきはとても大切です。速度はユーザーにとって体感的に影響する部分なので、見えないけれど重要なんですよ。」
生徒
「Stopwatchって覚えやすいし、書き方も簡単でした!Start()とStop()で挟むだけでしたもんね。」
先生
「ええ、シンプルですが非常に強力です。たとえば、複数のアルゴリズムを比べるときなんかにも大活躍しますよ。」
生徒
「プログラムが速くなったかどうかを“体感”じゃなくて“数字”で見るのが大事なんですね。」
先生
「そのとおり。今後、大きなプロジェクトを作るときも、実行時間の測定は大切な作業になりますよ。今のうちに慣れておきましょうね。」