メモリ使用量を減らす方法

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
セロリ

メモリ使用量を減らす方法

#1 投稿記事 by セロリ »

ゲームをつくってるんですが、メモリ使用量が増え続けて困っています。
メモリ使用量を減らす方法などありましたら教えてください。
よろしくお願いします。
Sunshine

#2 投稿記事 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
Sunshine

訂正…

#3 投稿記事 by Sunshine »

コード: 全て選択

ReleaseDC(hWndDC) → ReleaseDC(hMainWnd, hWndDC)
 でした。すみません。つд`)
セロリ

開放・・・

#4 投稿記事 by セロリ »

DCはちゃんと開放してるみたいです・・・ほかの要因はないのでしょうか?
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#5 投稿記事 by イグトランス »

ならNew/mallocで確保しているメモリはDelete/freeで開放していますか?

> hBmp = CreateCompatibleBitmap(hWndDC, 640, 400)
> hADC = CreateCompatibleDC(hWndDC)
ところでこれはhWndDCでなくともhDCでできませんか。
セロリ

#6 投稿記事 by セロリ »

関数内で開放してないのがありますね・・・
でも戻り値にしてるのでfreeできない・・・・
いい案はありませんかね
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

#7 投稿記事 by Sinryow »

そのメモリの内容が不要になった時にそのメモリ領域を開放すればよいのではないでしょうか。

どのような関数で,どんな目的で使うのか見せていただけませんか?
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
返信する