|
ビットマップのピクセル単位の処理速度を比較する。Get/SetPixel関数は遅いと言われているが、本当かどうか確認するとともに、Marshalクラスによる直接メモリアクセスの実力を知る。
●比較・実験方法 言語の違いでは、VB、C#の違いはソースレベルでの記述は異なるが、中間言語ではほぼ同じとなり、実行時はほぼ同じ状態となるので差はない。実際に確認したので、ここでは割愛する。 ・SetPixel VB.NET のマネージドコード、恐ろしく遅いと言われている。 ・WriteByte マーシャルにてビットマップをメモリ上のデータとして扱う。但し、要素のアクセスは専用関数で行う。 ・配列 マーシャルにてビットマップをメモリ上のデータとして扱い、そのデータをバイト配列化し、直接アクセスする。最速になると期待できる。 ●結果 ○処理時間全体 CPU:ペンティアム4 3.2GHz、メモリ:1024MB、OS:Windows XP Pro SP2
●考察
●注意 時間計測を、デバッグモードで行うと、.NET関数などはかなり細かなチェックが入るので、実行速度が極端に遅くなる場合がある。SetPixelやWriteByte などは、デバッグモードでは、ピクセル当り、数十μSも掛かってしまう。当初、これに気がつかず、WriteByte がSetPixel より遅く計測され随分と悩んでしまった。 ●実験のコード ここを参照方。 |