BitBlt等の転送能力について

BitBltなどの転送速度について不明なところが多かったため、調査してみました。というのは、以前はSetDIBitsToDeviceなどは、遅いといわれており、使用を避けていました。しかし、最近はそうではないということを聞いたためです。

 

テストの条件

 

テスト結果

  A B
BitBlt 2.33 3.34
StretchBlt 2.33 3.35
SetDIBitsToDevice 2.49 3.42
StretchDIBits 2.51 3.45
  A B
BitBlt 1.36 5.95
StretchBlt 1.39 5.97
SetDIBitsToDevice 1.60 6.07
StretchDIBits 1.60 6.07

(補足)このBitBltの条件Aの1000回のループ内に以下のプロセスを組み込むと負荷は1.36から、1.50に上昇する。
      HDC hdcBitmap = CreateCompatibleDC(NULL);
      SelectObject(hdcBitmap, hBitmap);
      DeleteDC(hdcBitmap);

結論

昔のように速度面からSetDIBitsToDeviceやStretchDIBitsの使用を避ける必要はないと思われる。また、サイズが変わらない時のBitBltとStretchBlt、SetDIBitsToDeviceとStretchDIBitsの速度差もほとんどない。