1

実メモリを必要とするいくつかのアプリケーションがあり、多くのメモリを消費しています。解決策の 1 つは、アプリケーション内のすべてのメモリをロック (VirtualLock) することですが、アプリケーションは .NET にあるため、正しく行うには何時間もかかります。

それで、私の質問は、すべてが実際にメモリにあることを保証するために、スワップファイルを無効にする(マシンに十分なRAMがある)有効な戦略ですか?

アップデート:

繰り返しますが、これは非常に汚い方法であり、OS全体の動作を損なう可能性があることはわかっていますが、私は全責任を負い、結果に対処します。何が起こるか知りたいだけです.問題的に。

他の StackExchangers がそれについて考えていることは次のとおりです

4

3 に答える 3

2

そうすることでメモリに強制できないことが 1 つあります。それは、実行可能イメージとマップされたファイルです。これらは、それぞれ独自の「ページ ファイル」です。メモリ不足が発生すると、Windows はメモリ内のページが変更されていないことを検出し、それらのページは後で再読み込みできるため単に破棄します。

ファイルに裏打ちされていないものはすべてページアウトできません (置く場所がないだけです)。したがって、あなたのテクニックは実際に機能すると思います。

多くの問題は見られません。私は常にページングファイルなしで実行しています(16GB RAM)。ブルー スクリーンの場合、完全なメモリ ダンプをキャプチャする機能が失われますが、ほとんどの場合、それは必要ありません。

物理メモリの制限に決して達しないようにしてください。そうしないと、多くのプログラムが激しくクラッシュします。OOM の状況に対処するためにプログラムを作成する人は誰もいません (コア Windows コンポーネントがクラッシュしたことは一度もありません。よくやったと思います)。

于 2012-07-14T12:04:34.077 に答える
1

ページファイルを無効にしてみました。うまく終わらなかった…

私は野生のガチョウの追跡をしたとだけ言っておきます。ページファイルを無効にすると、ディスク I/O に非常に大きな負荷がかかり、すべてのパンチが必要になりました。

要約: 私の場合、Windows でファイル キャッシュとアプリケーションのメモリ使用量のバランスをとることが明らかに勝者です。

于 2012-07-15T22:54:05.710 に答える
1

データが常にメモリ内にあることを確認する必要があるだけです

しかし、メモリにデータがあっても、それにアクセスするために必要なコードがないことに何のメリットがあるのでしょうか? データが RAM にあることは確認できますが、コードが RAM にあることは確認できません。コードをページインする必要がある場合、まったく同じ種類の遅延が発生します。候補の最初のセットは .NET フレームワーク アセンブリであり、プレジット (「ngen-ed」) され、*.ni.dll によってサポートされています。ファイル。それについてできることは、GAC ディレクトリ (c:\windows\assembly\gac_64 および gac_msil ディレクトリ) から削除することです。支払う代償は、ウォーム スタートが大幅に遅くなることと、複数の .NET プログラムを実行するときに共有が行われないことです。次の候補は、Windows オペレーティング システムの DLL です。それについてあなたができることは何もありません。

もう 1 つ気になる点は、ファイル システムのキャッシュです。RAM の使用量が増えると、キャッシュが縮小します。これにより、ディスク アクセスが大幅に遅くなります。特に書き込みは、キャッシュできない場合、数マイクロ秒から数秒になると非常に遅くなります。

RAM の使用量が非常に予測可能であり、制限をはるかに下回っていて、マシン上で 1 つのプログラムしか実行していない場合、これは実際の問題ではない可能性があります。それが事実であることを確認するために、それを監視する必要があります。RAM について心配しなければならないことは、RAM を大量に購入した目的を大きく損ないます。特に、ページング ファイルを無効にしても実際に何かが得られるという保証がない場合は.

于 2012-07-14T12:58:15.570 に答える