製作・改造なんでもやっちゃう広くて浅い活動日誌

2017/081234567891011121314151617181920212223242526272829302017/10

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
C#でプログラムを書いていたのですが、配列の範囲外をアクセスしないように条件付けするのが面倒だったので、覚えたての例外処理でまとめて済ませてしまいました。

しかし、いざ実行と思ってみると速度がかな~り遅くなってしまったので、例外処理そのものがどれくらい遅いのかを実験してみました。

コードはこんなのです。
using System;
namespace Exception_Test
{
class Program
{
static void Main(string[] args)
{
int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int a;
DateTime dt;
System.Threading.Thread.Sleep(1000);

//if-else文で条件付け
dt = DateTime.Now;
for (int i=0; i<1000; i++)
{
if (i < array.Length) { a = array[i]; }
else { a = 0; }
}
Console.WriteLine("if-else: " +
(DateTime.Now - dt).Milliseconds.ToString() + "ms");

System.Threading.Thread.Sleep(1000);

//try-catch文で例外処理
dt = DateTime.Now;
for (int i = 0; i < 1000; i++)
{
try { a = array[i]; }
catch { a = 0; }
}
Console.WriteLine("try-catch: " +
(DateTime.Now - dt).Milliseconds.ToString() + "ms");
}
}
}


要素が10個しかない配列に対して、for文を使って0~1000までの値でアクセスしようとします。
if-else文では配列の長さと比較してから処理、try-catch文ではまずは配列にアクセスしてみるという形になりますが、後は同じような処理をしているはずです。
最終的には、それぞれの処理にかかった時間をミリ秒で出力します。
結果はこんな感じでした。

if-else: 1ms
try-catch: 155ms

PCのスペックや諸々の状況によって変わるんでしょうが、例外処理の方が100倍以上遅いんですね。
便利ですが、状況に応じて使い方を気をつけなければいけないようです。


[完全版] 究極のC#プログラミング ~新スタイルによる実践的コーディング
[完全版] 究極のC#プログラミング ~新スタイルによる実践的コーディング川俣 晶

Amazonで詳しく見る
関連記事
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://creatornote.blog87.fc2.com/tb.php/22-4a00e75d
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。