C++プログラムで非常に頻繁にHBITMAPイメージを作成する必要があります。使用後にこれらのビットマップを削除する必要があります。 コードは、私が継続的に、HBITMAPを作成し、このマップを使用する関数を呼び出して、それを削除したスレッドに無限のサイクルを持っているこのWIndows関数DestroyObject for HBITMPがうまく動作しない(メモリリーク)
HBITMAP hBmp;
while(true) {
hBmp = CreateBitmap(width, height, 1, 8, imageData);
process(hBmp);
DeleteObject(hBmp);
}
に似ています。ループの開始時に、プロセスのメモリ使用量が以前のサイクルよりも大きいかどうかをチェックし、そうであれば印刷します。 CreateBitmap()およびDeleteObject()を使用すると、メモリリークが小さくなります。プロセスメモリの使用量は4KBずつ増加します(10秒ごとに、時には何も起こらないことがあります)。
私はプロセス関数も呼び出さずにテストしましたが、問題はまだ残っていますので、ビットマップ処理が原因だと思います。 さらに、私は無限ループの外側にイメージを作成して(私はそれを1回だけ作成します)、ループで時間を無限に処理し、メモリリークが発生しないようにテストしました。
注:DeleteObject()は常に値> 0(エラーなし)を返します。
問題はDeleteObject()関数に関連している可能性はありますか?このようにビットマップの作成/削除に何か問題はありますか?
テクニカルノート: のWindows XP ボーランドC++ Builderの5
私はHBITMAPを使用していなくても、たとえばCreateBitmapの直後にDeleteObjectがある場合でもリークが発生します。他のものは、私は1 MBの周りの画像を "読み込む"ので、DeleteObjectが失敗した場合、私は4KBではなく1MBのメモリ "ステップ"を期待しています。 –