本ページは公開が終了したページの複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。

[SDK16] システムリソースが減ってしまう原因

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 はこれを解放しません。この場合、以下の処理でリソースの解放を必ず行ってください。

  1. MENU 作成時に、MENU HANDLE を保持しておく。
  2. アプリケーション終了時に、GetMenu() で CURRENT MENU HANDLE を獲得する。

    (該当 MENU は Windows 3.1 により自動的に解放される)

  3. 2.の CURRENT MENU 以外の MENU を DestroyMenu() で解放する。

USER HEAP の主な獲得・解放関数

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()

※ このリストにない関数でもリソースを消費するものについては、関数リファレンスを参照して解放が必要かどうかを確認し、注意して使用してください。

その他

(C)1994 Microsoft Corporation. All rights reserved.

マイクロソフト株式会社 テクニカル サポート


UP
UP
Home
HOMEPAGE
inserted by FC2 system