関連記事
- なんと!今週の土曜日も仕事してますた.来週の土曜日も仕事臭い.TCPソケット通信をゴリゴリ書いてる 【2025年08月30日(土)】
- 【ChatGPT o4】祝日なのに仕事ーバテすぎー今夜こそ絶命だーモルモルモル 【2025年03月20日(木)】
- 【#CSharp】制御系が動き出したべ 【2025年02月20日(木)】
- 【#CSharp】ひっさしぶりにガッツリなC#案件をやっているぞー 【2025年02月19日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
2006年10月17日 20時58分 旧ブログより
memcpy()のC#版での性能テスト
いや、実際は、memcpy()じゃなくて、Array.Copy()命令なんだが(w
前回のC++版をC#に書き直してみました
条件は以下のとおり
CPU : AMD Athlon64x2 3800+(2.0GHz)
Memory : 1GB
OS : Windows XP Pro
C++ : Visual Studio 2005(C#2.0) + .Net FrameWork2.0
| 画像データ2000回の Array.Copy()を実行 |
リリースコンパイル |
| DVサイズ 720 * 480 32ビットピクセル (1.3MB) |
2,891ミリ秒 (956,347 B/ms) |
| ハイビジョンサイズ 1280 * 960 32ビットピクセル (4.8MB) |
10,172ミリ秒 (966,417 B/ms) |
ほんのちょっぴりC++版より遅い感じ
開発コストは、比べ物にならないくらいC#のほうが、低いし
C#でも、安心して画像処理できる、はず?(w
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace memcpy
{
public partial class Form1 : Form
{
private const int DUMMY_WIDTH = 1280;
private const int DUMMY_HEIGHT = 960;
private const int DUMMY_DEPTH = 4;
private const int DUMMY_BUFLEN = DUMMY_WIDTH *
DUMMY_HEIGHT * DUMMY_DEPTH;
byte[] buf1;
byte[] buf2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
buf1 = new byte[DUMMY_BUFLEN];
buf2 = new byte[DUMMY_BUFLEN];
try
{
DateTime dt = DateTime.Now;
int min = dt.Minute;
int sec = dt.Second;
int mili = dt.Millisecond;
label1.Text = min.ToString() + "_" + sec.ToString() + "_" + mili.ToString();
for(int i = 0; i < 2000; i++)
{
Array.Copy(buf1, buf2, DUMMY_BUFLEN);
}
dt = DateTime.Now;
min = dt.Minute;
sec = dt.Second;
mili = dt.Millisecond;
label2.Text = min.ToString() + "_" + sec.ToString() + "_" + mili.ToString();
}
catch
{
}
finally
{
buf1 = null;
buf2 = null;
}
}
}
}


処理の内容を考えると、速度差がでるのが不思議~
バッファ領域の確保で差が出てるのでしょうか?
>>康ちゃん さま
C#じゃと,JITの性能差勝負になるべ
JITなら,SSE命令も使えるようになるぞー
(C++は明示的にSSE命令使用をコンパイル時指定せんと,基本はOff@32ビットコンパイル)