1

使用可能なメモリが特定の制限 (ユーザー設定可能) を下回ったときに通知を受け取る方法はありますか? WM_HIBERNATE イベントを調べましたが、このイベントの制限はユーザーが設定できず、ハードコードされているようです (160KB??)。私が考えることができる唯一の方法は、GlobalMemoryStats() API を介して利用可能なメモリを定期的に (5 秒ごとに??) OS にポーリングし、利用可能なメモリがユーザーが設定した制限を下回った場合は、ユーザーにイベントを発生させることです。より良い方法はありますか?

この通知は、Windows CE 5.0 および Windows Mobile 6.5 以降のデバイスで機能する必要があります。

4

2 に答える 2

2

OSには、メモリが任意のレベルを下回っていることを示すものは何もありません。アプリでポーリングするか、それを実行するサービス/ドライバーを作成するのが、おそらく最善の方法です。どちらが「より良い」かは、1つのプロセスだけが通知について知る必要があるかどうかによって異なります。

于 2012-03-26T15:33:32.587 に答える
2

それがメモリを浪費する可能性のあるアプリケーションの場合、システムが実行する前に、そのようなメモリ不足の状況をインターセプトするコードを実装できます。いくつかのヒント:

  • new、malloc、またはメモリを割り当てるその他の関数をオーバーライドし、割り当てによってメモリが消耗するかどうかを毎回確認します。

  • アプリの速度が低下するのではないかと心配している場合は (そうするべきです:))、Dougs Lee malloc.c などのメモリ マネージャーを使用して、システム メモリから別の 64KB ブロックを取得するたびにシステムをチェックするように変更できます。メモリが少なすぎない

  • レジストリから低メモリ レベルを読み取ることができます。これらのエントリは、WCE の場合は HKLM\System\Hibernate、WM の場合は HKLM\System\OOM にあります。

http://msdn.microsoft.com/en-us/library/ms911907.aspx

于 2012-03-26T16:43:58.280 に答える