PWJ196 - 94/12 |
この資料は以下の製品について記述したものです。
プログラムマネージャの "Windows について" で表示される メモリ : xxxx KB 使用可能
システム リソース : xx % 使用可能 の「システム リソース」とは何を指すのですか?
ユーザーズリファレンスマニュアルによれば、メモリ容量とのことですが、それでは上の行の ”使用可能メモリ容量”との違いは何でしょうか?
作成したプログラムを実行すると、システム リソースが減ったままになってしまいます。
なぜでしょうか?
「システム リソース」は、Microsoft(R) Windows(TM) Version 3.1 (以下 Windows 3.1)上で動作中の全アプリケーションで共有される、GDI および USER の HEAP 領域のことを指します。また、プログラムマネジャーの "Windows について" では、システム リソース(GDI あるいは USER)の HEAP の少ない方の割合が、表示されています。
システム リソースが減少してしまう場合、システム リソースの解放を正しく行っていないことが、考えられます。
GDI HEAP が消費されるのは、OBJECT (PEN / BRUSH / FONT / BITMAP / REGION / PALETTE) を作成した場合です。 これらの OBJECT を作成した場合は、OBJECT を必要としなくなったときに対応する関数でリソースの解放を必ず行ってください。作成した OBJECT のハンドル値は、それを解放するまで失わないように注意してください。ハンドル値を失うと解放ができなくなります。具体的なシステム リソースの消費・解放のされ方は別紙の通りです。
USER HEAP が消費されるのは、WINDOW CLASS / MENU / WINDOW を作成した場合です。
USER HEAP は通常、アプリケーションが終了した場合には、自動的に解放されますが、MENU には、特別なケースがあります。
Windows 3.1 は、CURRENT MENU (GetMenu()で得られる MENU)については、自動的に解放しますが、もしどの Windows 3.1 でも使用中でない MENU があった場合、Windows 3.1 はこれを解放しません。この場合、以下の処理でリソースの解放を必ず行ってください。
(該当 MENU は Windows 3.1 により自動的に解放される)
USER HEAP の獲得関数 USER HEAP の解放関数
RegisterClass() UnregisterClass()
CreateMenu() DestroyMenu()
CreatePopupMenu() DestroyMenu()
CreateDialog DestroyWindow()
リソースの獲得関数 リソースの解放関数
CreateCursor() DeleteCursor()
CreateDC() DeleteDC()
CreateCompatibleDC() DeleteDC()
CreateIcon() DestroyIcon()
CreateIC() DeleteDC()
GetDC() ReleaseDC()
BeginPaint() EndPaint()
CreateBitmap() DeleteObject()
CreateBitmapIndirect() DeleteObject()
CreateCompatibleBitmap() DeleteObject()
CreateDIBitmap() DeleteObject()
CreateDiscardableBitmap() DelteeObject()
CreateBrush() DeleteObject()
CreateBrushIndirect() DeleteObject()
CreateHatchBrush DeleteObject()
CreatePatternBrush() DeleteObject()
CreateFont() DeleteObject()
CreateFontIndirect() DeleteObject()
AddFontResource() RemoveFontResource()
CreatePen() DeleteObject()
CreatePenIndirect() DeleteObject()
CreateRectRgn() DeleteObject()
CreateEllipticRgn() DeleteObject()
CreateEllipticRgnIndirect() DeleteObject()
CreatePolygonRgn() DeleteObject()
CreatePolyPolygonRgn() DeleteObject()
CreateRectRgn() DeleteObject()
CreateRectRgnIndirect() DeleteObject()
CreateRoundRectRgn() DeleteObject()
CreatePalette DeleteObject()
LoadBitmap() DeleteObject()
※ このリストにない関数でもリソースを消費するものについては、関数リファレンスを参照して解放が必要かどうかを確認し、注意して使用してください。
マイクロソフト株式会社 テクニカル サポート
UP |
HOMEPAGE |