1

私は、過剰な量のメモリを使用する傾向があるアプリケーションに取り組んでいるので、これを減らしたいと思います。

私はこれを追加することによって、Javaプログラムのために可能であることを知っていますMaximum heap sizeJavaプログラムの起動中のパラメータ(例:java.exe ... -Xmx4gしかし、ここで私はWindows-10システム上の実行ファイルを扱っているので、これは当てはまりません。

この記事のタイトルはこのURLこれはこれを行う方法を述べていますが、それはまた述べています:

最大ワーキングセットプロセスに割り当てられたワーキングセットの最大量を示します。しかしながら、この番号はWindowsによって無視されますリソース管理アプリケーションによってプロセスに強い制限が設定されていない限り。

その間、私は次のコード行が私のプログラムのメモリ使用量に全く影響を及ぼさないことを確認することができます。

HANDLE h_jobObject = CreateJobObject(NULL, L"Jobobject");
if (!AssignProcessToJobObject(h_jobObject, OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId())))
{
    throw "COULD NOT ASSIGN SELF TO JOB OBJECT!:";
}
JOBOBJECT_EXTENDED_LIMIT_INFORMATION tagJobBase = { 0 };
tagJobBase.BasicLimitInformation.MaximumWorkingSetSize = 1; // far too small, just to see what happens

BOOL bSuc = SetInformationJobObject(h_jobObject, JobObjectExtendedLimitInformation, (LPVOID)&tagJobBase, sizeof(tagJobBase));

=>bSucですtrue、または私が期待すべき何か他にありますか?

これに加えて、前述のツール(Hyper-Vのようなリソース管理アプリケーション)は、私のWindows-10システムでは動作しないようです。

これの隣に、この主題についての別の投稿があるようです「C ++でプロセスのWorkingSetを強制的に1GBにする方法はありますか?」しかし、ここでも結果は否定的なようです。

よく理解してください。私はC ++で作業しています。このURL該当しません。

だから今、私は簡単な質問で立ち往生している:Windows 10で実行されている、現在のプロセスのメモリ使用量を制限するためのC + +で実装可能な方法はありますか?

誰か考えがありますか?

前もって感謝します


  • 症状と戦うのではなく、問題の原因を解決したほうがよいでしょうか。 - user463035818
  • 「過剰な量のメモリを使用する傾向があるアプリケーションで作業しているので、これを減らしたい」と述べました。 - それからより少ないメモリを使用します。それ以外の方法では、アプリケーションがメモリの割り当てに失敗し(そしてその後間もなく停止する可能性があります)、これはおそらく望んでいないことです。 - UKMonkey
  • 最初のコメントに答えると、プロセスはマルチスレッドで処理キューです。その考えは、メモリ使用量が大きくなり過ぎた場合、メモリ使用量が再び妥当になるまでスレッドがそのキューを処理するために少し待つことを決定するかもしれないということです。 - Dominique
  • いいえ。メモリを制限するOS / C ++のオプションであれば、プログラムがメモリ不足の例外でクラッシュする可能性があります。根本的な問題を解決する必要があると@ user463035818が述べています。 - Richard Critten
  • スレッドは、利用可能なメモリに基づいて待機することを決定しません。十分なメモリがあるか、メモリが不足しているかのどちらかで、その場合は、キューを処理するのを待っているスレッドよりも深刻な問題が発生します。 - user463035818

リンクされた質問


関連する質問

最近の質問