このブログ「吟遊詩人の戯言」 の記事検索...

C#でもmemcpy()してみた

関連記事

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;
            }
        }
    }
}
[/csharp]

 
 
 
 

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">