スポンサーサイト

Posted by chaf on --.--
Category : スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C#]配列操作の速度について

Posted by chaf on 20.2009
Category : C#
さて、今日はコンパイラを作成中なのでその時に気になって調べた事でも書きたいと思います。

.net(xp vs2008 C#)では、Listと T[]という風に大きく分けて2パターンの配列っぽい表現が可能ですが、これについての速度が気になったんですよね。

List VariableNameの場合は、可変長の配列っぽい記述ができる。
T[] VariableNameの場合は、固定長。
どちらの場合も、要素へのアクセスはT[index]という感じでできるので使い勝手はそれ程変わりません。

配列要素の取得は、VariableName.CountとVariableName.Lengthと微妙に違います。
まあ、この程度であればそれほど気になりませんよね。

さてここで問題がでてきそうなのは、配列要素の検索や加工頻度によっての処理時間の影響です。

今回テストしたコードを示します。(10分くらいで作ったので検証方法に問題があるかもしれませんのであしからず)

using System;
using System.Collections.Generic;

namespace Bench {
/// <summary>配列系のベンチ</summary>
class ArrayBench {
List<string> StringList;
string[] Strings;
int LoopCount;

/// <summary>コンストラクタ</summary>
public ArrayBench(){
StringList = new List<string>();
Strings = new string[10000];

for(int i = 0;i < Strings.Length;i++) Strings[i] = "1";
StringList.AddRange(Strings);

LoopCount = 10000;
}

/// <summary>ベンチマークを実行</summary>
public void Bench(){
int s, e;
s = Environment.TickCount;
BenchList();
e = Environment.TickCount;
Console.WriteLine("List Time:{0}msec", e - s);

s = Environment.TickCount;
BenchArray();
e = Environment.TickCount;
Console.WriteLine("Array Time:{0}msec", e - s);

s = Environment.TickCount;
BenchList();
e = Environment.TickCount;
Console.WriteLine("List Time:{0}msec", e - s);

s = Environment.TickCount;
BenchArray();
e = Environment.TickCount;
Console.WriteLine("Array Time:{0}msec", e - s);

}
/// <summary>Listクラスのベンチマーク</summary>
void BenchList(){
for(int j = 0;j < LoopCount;j++)
for(int i = 0;i < StringList.Count;i++){
if (StringList[i] == "") return;
}
}
/// <summary>配列のベンチマーク</summary>
void BenchArray(){
for(int j = 0;j < LoopCount;j++)
for(int i = 0;i < Strings.Length;i++){
if (Strings[i] == "") return;
}
}
}
}


=== 結果 ===
List Time:1656msec
Array Time:1094msec
List Time:1656msec
Array Time:1078msec



まあ、予想はされましたが固定長のアクセスの方が速いです。
つまり、非常に長い時間&頻繁にアクセスする場合は一度固定配列に移して処理する方が良い場合があるということが分かりました。
スポンサーサイト

Comment

Post comment


  • password
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://clish.blog50.fc2.com/tb.php/139-86ad9df9
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。