トップページ > 記事閲覧
ウィンドウ最小化でメモリが増加
名前:るろろ 日時: 2018/07/14 22:52

最近DXライブラリを使い始めたものです。 宜しくお願い致しますm(_ _)m --------------- ※Windowsタスクマネージャ->プロセス->メモリ(プライベートワーキングセット)、で確認 VisualStudio2017(VC++) でビルドしたEXEをウィンドウモードで起動し、 しばらくするとメモリの増加が安定しますが、 その後、ウィンドウを最小化するとメモリがさらに増加していきます。 初っ端はMB単位で増加し、そのうちKB単位で増加していきます。 (いつまでも増え続けるわけではなく、ある程度いくと安定します) 起動に必要な最低限に近い構成で10MB以上の増加を確認、 そうでないEXEでは安定時の2倍以上のメモリ増加を確認しました。 このあと再びウィンドウの最小化を元に戻すと、メモリが次第に減少していきます。 が、元の安定時のメモリ使用量までは減少しないように見えます。 よく分からないのですがこの動作は不具合でしょうか?それとも・・? --------------- ちなみに現状、 DxLib::SetAlwaysRunFlag(TRUE); を起動時の初期化で1回だけ呼び出していまして、 これをコメントアウトして実行しないようにすると ウィンドウを最小化してもメモリは増減しませんでした。 -------- 環境:Win7 (32bit) CPU:Intel Core i5 760 (2.80 GHz) RAM:4.00 GB
メンテ

Page: 1 |

Re: ウィンドウ最小化でメモリが増加 ( No.1 )
名前:管理人 日時:2018/07/16 23:53

すみません、SetAlwaysRunFlag( TRUE ); + ウィンドウ最小化の状態で ScreenFlip を呼び続けると メモリ使用量が増加するバグがありました 修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m ( ただ、最小化した状態でもプログラムが動作しているという違いはあるので、 SetAlwaysRunFlag( FALSE ); + ウィンドウ最小化の場合ほど綺麗に『使用メモリ量が変化しない』状態には ならないかもしれません ) http://dxlib.o.oo7.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.1 Berlin 用 http://dxlib.o.oo7.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 http://dxlib.o.oo7.jp/temp/DxLibDotNet.zip // Windows版 .NET用 http://dxlib.o.oo7.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: ウィンドウ最小化でメモリが増加 ( No.2 )
名前:るろろ 日時:2018/07/17 13:42

対応頂き、ありがとうございます。 しかしながら・・・、 こちらでもリビルドして (DxLibVCTest.zipの展開後のフォルダをフォルダごと差し替えたDxLibを使って) 試してみましたが以前のメモリ増加量と大差ありませんでした(汗。 感触的には、 以前であれば徐々に増えていく感じで、 今回のであれば一気にドカンと増えて安定するのも早い(?)ような感じです。 いずれにしても最終的なメモリの増加量に大差はない感じがします。 それと最小化から戻したときに解放されにくくなった(?)もしくは解放されない 感じになった気もします。 メモリが安定時の2倍に増えるほうのコードを載せることはできないのですが、 起動に必要な最低限に近い構成のほうのコードは以下の通りです。 こちらだと一気に8〜10MB近く増えます。 2倍に増えるほうは例えば50MB→110MBぐらいまで増えます。 当方側の環境の問題でしょうか? ---------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DxLib::SetAlwaysRunFlag(TRUE); DxLib::SetOutApplicationLogValidFlag(FALSE); DxLib::ChangeWindowMode(TRUE); DxLib::SetGraphMode(1024, 768, 32); if (DxLib::DxLib_Init() == -1) return -1; DxLib::SetDrawScreen(DX_SCREEN_BACK); while (DxLib::ScreenFlip() == 0 && DxLib::ProcessMessage() == 0) { if (DxLib::ClearDrawScreen() != 0) break; } DxLib::DxLib_End(); return 0; }
メンテ
Re: ウィンドウ最小化でメモリが増加 ( No.3 )
名前:管理人 日時:2018/07/18 00:50

すみません、載せていただいたプログラムで私の環境でもドカッと20MBほど使用メモリが増加しました こちらは最小化の間も描画コマンドを処理しようとしている関係でシステム側で確保されているメモリなので 延々と確保され続けて空きメモリが枯渇するということはないと思いますが、もしこちらの現象を抑えたいとの ことでしたら、お手数で申し訳ありませんがウィンドウが最小化しているかどうかを確認するための 関数 GetWindowMinSizeFlag() を使用して、戻り値が FALSE の場合のみ ClearDrawScreen, DrawGraph, ScreenFlip などの 描画関数を呼ぶようにしてください m(_ _;m ( 載せていただいたプログラムを GetWindowMinSizeFlag() の戻り値が FALSE の場合のみ描画関数を呼ぶようにした場合は以下のようになります ) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DxLib::SetAlwaysRunFlag(TRUE); DxLib::SetOutApplicationLogValidFlag(FALSE); DxLib::ChangeWindowMode(TRUE); DxLib::SetGraphMode(1024, 768, 32); if (DxLib::DxLib_Init() == -1) return -1; DxLib::SetDrawScreen(DX_SCREEN_BACK); while (DxLib::ProcessMessage() == 0) { if (GetWindowMinSizeFlag() == FALSE) { if (DxLib::ClearDrawScreen() != 0) break; if (DxLib::ScreenFlip() != 0) break; } } DxLib::DxLib_End(); return 0; }
メンテ
Re: ウィンドウ最小化でメモリが増加 ( No.4 )
名前:るろろ(解決) 日時:2018/07/18 11:32

なるほどそちらでも増えましたかw サンプルコードまで記載頂き、助かりました^^。 こちらでもうまくいきました! 対応、ありがとうございました m(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存