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
C#:
- 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)
- {
- 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;
- }
- }
- }
- }