C++ プログラムで頻繁に HBITMAP イメージを作成する必要があり、もちろん使用後にこれらのビットマップを削除する必要があります。コードはこれに似ています
HBITMAP hBmp;
while(true) {
hBmp = CreateBitmap(width, height, 1, 8, imageData);
process(hBmp);
DeleteObject(hBmp);
}
HBITMAP を継続的に作成し、このビットマップを使用する関数を呼び出してから削除するスレッドに無限サイクルがあります。ループの開始時に、プロセスのメモリ使用量が前のサイクルよりも大きいかどうかを確認し、大きい場合は出力します。CreateBitmap() および DeleteObject() を使用すると、わずかなメモリ リークが発生します。プロセスのメモリ使用量が時々 4KB 増加します (10 秒ごとの場合もあれば、数分間何も起こらない場合もあります)。
私もプロセス関数を呼び出さずにテストしましたが、まだ問題があるので、ビットマップの処理が原因だと思います。さらに、別のテストを行い、無限ループの外側でイメージを作成し (したがって、1 回だけ作成します)、ループ内で無限回処理しましたが、メモリ リークは発生しませんでした。
注: DeleteObject() は常に値 >0 (エラーなし) を返します。
問題が DeleteObject() 関数に関連している可能性はありますか? この方法でビットマップを作成/削除すると何か問題がありますか?
テクニカル ノート: Windows XP Borland C++ Builder 5