ページ 1 / 1
メモリ使用量を減らす方法
Posted: 2005年9月02日(金) 00:49
by セロリ
ゲームをつくってるんですが、メモリ使用量が増え続けて困っています。
メモリ使用量を減らす方法などありましたら教えてください。
よろしくお願いします。
Posted: 2005年9月02日(金) 01:55
by Sunshine
作ったデバイスコンテキスト等は解放してますか?
ローカルで作成されたデバイスコンテキストやビットマップなどは、そのローカル内で解放させなければなりません。
グローバルで作成したデバイスコンテキスト等はプログラム終了時(RADツールで作ったプログラムならMainWnd_Destroy内)で解放してやります。
ちなみに、CreateCompatibleDCで作成されたデバイスコンテキストはDeleteDC、GetDCで取得したデバイスコンテキストはReleaseDCで解放してやります。
また、ビットマップ、ブラシ、フォントなどのオブジェクトをデバイスコンテキストに適用した場合、先にデバイスコンテキストから解放してやらないと、オブジェクトを解放することが出来ませんので注意。
例:
コード: 全て選択
Sub MainWnd_Paint(hDC As DWord)
Dim hADC As HDC, hWndDC As HDC, hBmp As HBITMAP
hWndDC = GetDC(hMainWnd)
hBmp = CreateCompatibleBitmap(hWndDC, 640, 400)
hADC = CreateCompatibleDC(hWndDC)
SelectObject(hADC, hBmp)
BitBlt(hDC, 0, 0, 640, 400, hADC, 0, 0, SRCCOPY)
'解放
DeleteDC(hADC)
DeleteObject(hBmp)
ReleaseDC(hWndDC)
End Sub
訂正…
Posted: 2005年9月02日(金) 01:57
by Sunshine
コード: 全て選択
ReleaseDC(hWndDC) → ReleaseDC(hMainWnd, hWndDC)
でした。すみません。つд`)
開放・・・
Posted: 2005年9月02日(金) 02:22
by セロリ
DCはちゃんと開放してるみたいです・・・ほかの要因はないのでしょうか?
Posted: 2005年9月02日(金) 07:43
by イグトランス
ならNew/mallocで確保しているメモリはDelete/freeで開放していますか?
> hBmp = CreateCompatibleBitmap(hWndDC, 640, 400)
> hADC = CreateCompatibleDC(hWndDC)
ところでこれはhWndDCでなくともhDCでできませんか。
Posted: 2005年9月02日(金) 21:49
by セロリ
関数内で開放してないのがありますね・・・
でも戻り値にしてるのでfreeできない・・・・
いい案はありませんかね
Posted: 2005年9月06日(火) 08:14
by Sinryow
そのメモリの内容が不要になった時にそのメモリ領域を開放すればよいのではないでしょうか。
どのような関数で,どんな目的で使うのか見せていただけませんか?