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

最新記事

すべて表示

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

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

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

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

国際関係の考察

#政治 #経済 #国際社会 【国際関係の考察】 第二次世界大戦前、「侵略戦争を行っても良い」と言うのが世界的に認められていたと信じて疑わない方たちがいます。 その方たちに言わせると、「突然、変わったんだ、世界的に、侵略戦争をしてはい」と言う思想に変わったんだとおっしゃっていますが、違います。 第二次世界大戦前も第二次世界大戦後も思想は変わっていないのです。 その思想は、「知的レベルの低い民族に対し

bottom of page