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件のコメント

最新記事

すべて表示

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

#地震 #水害 #大雨 #火災 #山火事 #地鳴り #土砂崩れ #大雪 #緊急 #避難 #緊急避難 #持出品 #持ち出し品 #持出し品 #避難時の食事 #緊急避難時の食事 【持出品】 首相官邸の名前で、非常用持ち出し袋として、避難の際に持ち出すものとして、Webで公開しているページがありました。 ***************************************************

国際関係の変化と日本の今後

#政治 #経済 #戦争 #平和 【世界情勢の変化】 ロシアがクリミア半島を併合しました。 これによって、ロシアが何か変な国になったと感じていました。 更に、ロシアは、ウクライナ全域を奪取すべく、戦争をしています。 そもそも、ゼレンスキー大統領が平和主義過ぎて、ロシアに所有している核兵器を全て返却してしまったのが、攻め入られる原因になっていると言う残念な結果です。 核兵器をロシアに返却する前にNat

新資本主義は、間違っている

#政治 #経済 【新資本主義は、間違っている】 新資本主義、「企業さえ生き残ればそれで良い」と言う思想は、間違っています。 企業経営のエゴでしかありません。 個人の投資家を大事にしない資本主義なんて、分けのわからない思想が間違っている。 国民主権です。 大多数の国民は、企業経営者では無いのです。 新資本主義は、たったの2000人程度しかいない上場企業の経営者だけを守る思想で、殆どの国民生活を新資本

Comments


bottom of page