top of page
執筆者の写真神山 義尚

C#のポインタは本当に早いのか?

更新日:2021年1月22日



上記、画像は、「C# ベンチマーク」を実行して計測した結果です。

「C# ベンチマーク」は、当社のFreeソフトです。


Vector株式会社のWebサイトからダウンロードできます。

ダウンロードして使って下さい。



C# ベンチマークのプログラムの内容は、以下の様になっています。

numericUpDown1.Valueに処理回数が入力されています。


private void button1_Click(object sender, EventArgs e)

{

// int[]配列の場合

textBox1.Clear();

int iLen = (int)numericUpDown1.Value;

int[] iDat = new int[iLen];

string sDat = "";

System.Diagnostics.Stopwatch Sw = new System.Diagnostics.Stopwatch(); //ストップウォッチ

Sw.Reset();

Sw.Start();


for (int i = 0; i < iLen; i++)

{

iDat[i] = i;

}


Sw.Stop();

double Tim = (double)Sw.Elapsed.TotalMilliseconds; //ミリ秒を取得

sDat = Tim.ToString("F3"); // 小数点以下第三位まで表示

textBox1.Text = sDat + "ms";

}


private void button2_Click(object sender, EventArgs e)

{

//CString[] 配列

textBox2.Clear();

int iLen = (int)numericUpDown1.Value;

string[] sDatH = new string[iLen];

string sDat = "";

System.Diagnostics.Stopwatch Sw = new System.Diagnostics.Stopwatch(); //ストップウォッチ

Sw.Reset();

Sw.Start();


for (int i = 0; i < iLen; i++)

{

sDatH[i] = i.ToString();

}


Sw.Stop();

double Tim = (double)Sw.Elapsed.TotalMilliseconds; //ミリ秒を取得

sDat = Tim.ToString("F3"); // 小数点以下第三位まで表示

textBox2.Text = sDat + "ms";

}


private void button3_Click(object sender, EventArgs e)

{

// int[] 配列 ポインタ

textBox3.Clear();

int iLen = (int)numericUpDown1.Value;

int[] iDat = new int[iLen];

string sDat = "";

System.Diagnostics.Stopwatch Sw = new System.Diagnostics.Stopwatch(); //ストップウォッチ

Sw.Reset();

Sw.Start();


IntArrayTest(iLen, iDat);


Sw.Stop();

double Tim = (double)Sw.Elapsed.TotalMilliseconds; //ミリ秒を取得

sDat = Tim.ToString("F3"); // 小数点以下第三位まで表示

textBox3.Text = sDat + "ms";

}


unsafe private void IntArrayTest(int ilen, int[] idat)

{

fixed (int* piDat = &idat[0])

{

int* p = piDat;

for (int i = 0; i < ilen; i++)

{

*p = i;

p++;

}

}

return;

}


private void button6_Click(object sender, EventArgs e)

{

// int[] 配列 ポインタ stackallocを使用した場合

textBox4.Clear();

int iLen = (int)numericUpDown1.Value;

int[] iDat = new int[iLen];

string sDat = "";

System.Diagnostics.Stopwatch Sw = new System.Diagnostics.Stopwatch(); //ストップウォッチ

Sw.Reset();

Sw.Start();


IntArrayTest2(iLen);


Sw.Stop();

double Tim = (double)Sw.Elapsed.TotalMilliseconds; //ミリ秒を取得

sDat = Tim.ToString("F3"); // 小数点以下第三位まで表示

textBox4.Text = sDat + "ms";

}


unsafe private void IntArrayTest2(int ilen)

{

// stackallocを使用した場合

int* iDatH = stackalloc int[ilen];

for(int i = 0; i < ilen; i++)

{

*(iDatH + i) = i;

}

return;

}


C#の場合も、やっぱりポインタは早いですね。

C#の処理速度は、MFC(C++)よりも、約10倍遅いと言う結果でした。

MFCを出来るだけarray配列を使って書いた場合は、C#の200倍速いと言う速度計測結果でした。

しかし!! Microsoftは、array配列は使わないでvector配列を使う事を推薦しています。

以上、C#のポインタは本当に早いか?でした。


閲覧数:10回0件のコメント

最新記事

すべて表示

緊急時避難用の靴について

#避難 #災害 #避難用具 #避難用靴 #防災 #防災用具 [コロンビア] トレッキングシューズ ミドルカット 登山靴 セイバーファイブ ミッドアウトドライ YM8135 2877 サイズがちょっと、大きめでした。 Amazonで買いましたが、ネット販売の為、サイズを試す事...

緊急避難時の持出品と、避難時の食事

#地震 #水害 #大雨 #火災 #山火事 #地鳴り #土砂崩れ #大雪 #緊急 #避難 #緊急避難 #持出品 #持ち出し品 #持出し品 #避難時の食事 #緊急避難時の食事 【持出品】 首相官邸 の名前で、 非常用持ち出し袋...

Comments


bottom of page