1

ディスクにダンプする前に、できるだけ多くのデータを物理メモリに保存することが不可欠な、パフォーマンスが重要なアプリケーションを作成しています。

と を使用::GlobalMemoryStatusEx(...)::GetProcessMemoryInfo(...)て、物理メモリの何パーセントが予約済みまたは空きであるか、および現在のプロセスが処理しているメモリの量を確認できます。このデータを使用すると、物理メモリの最大 90% が使用されている場合、またはアプリケーションごとの最大 2 GB の制限の最大 90% に達している場合に確実にダンプできます。

ただし、システムが仮想メモリの使用を開始する前に実際に残っているバイト数を簡単に取得する方法が必要です。特に、アプリケーションは 32 ビットと 64 ビットの両方でコンパイルされるため、2 GB の制限は存在しません。

4

5 に答える 5

6

この機能はどうですか:

int
bytesLeftUntilVMUsed() {
    return 0;
}

私が思うほぼすべてのケースで正しい結果が得られるはずです;)

于 2009-12-09T11:55:45.093 に答える
5

256MbのRAMでWindows7を実行していると想像してください(MSは最小1GBを推奨しています)。これは事実上、使用可能なRAMの90%を再確保したいということで、ユーザーに求めていることです。

本当の問題は、なぜそんなに多くのRAMが必要なのかということです。「パフォーマンスクリティカル」基準とは正確には何ですか?

通常、この種の質問は、デザインにひどい問題があることを意味します。

アップデート:

トップオブレンジRAM(DDR3)を使用すると、理論上の転送速度は12GB / sになります。これは、帯域幅に余裕を持って、クロックサイクルごとに1つの32ビット値を読み取ることに相当します。その速度でCPUに入るデータで何か有用なことをすることは不可能だと私はかなり確信しています-命令処理のストールはこのフローを中断します。余分な、使用されていない帯域幅は、ハードディスクとの間でデータをページングするために使用できます。RAIDを使用すると、この転送速度は非常に高くなる可能性があります(RAM帯域幅の約1/16)。したがって、パフォーマンスを低下させることなく、ディスクとの間でデータを転送して処理することが可能です。読み取りの間隔は16サイクルで十分です(OK、ここでの計算は少し間違っている可能性があります)。

しかし、Windowsをミックスに投入すると、すべてがうまくいきます。メモリはいつでもなくなる可能性があり、アプリケーションは任意に一時停止する可能性があります。メモリをRAMにロックすると、システム全体に悪影響が及ぶため、メモリの場所を特定する目的が失われます。

達成しようとしていることとパフォーマンスの基準を説明すると、適切なソリューションの開発を支援する多くの人々がここにいます。システムの制限について質問する必要がある場合、実際に何か間違ったことをしているからです。

于 2009-12-09T12:00:19.537 に答える
1

標準的な解決策は、「仮想」を気にせず、「動的」を気にすることです。

仮想メモリの「仮想」部分は、独自の OS を作成することによってのみ無効にできるハードウェア機能と見なす必要があります。

ただし、オブジェクトの動的割り当ては、単にアプリケーション プログラムの設計です。

必要なオブジェクトの単純な配列を静的に割り当てます。それらのオブジェクトの配列を使用します。パフォーマンスの問題が発生するまで、静的に割り当てられた配列のサイズを増減します。

于 2009-12-09T13:59:41.683 に答える
1

アプリケーションがメモリをディスクにページアウトするのを止めることができたとしても、VMM が他のプログラムをディスクにページアウトしている可能性があり、それがパフォーマンスに影響を与える可能性があるという問題に遭遇します。言うまでもなく、別のアプリケーションが起動して、現在占有しているメモリを消費し、アプリケーションのメモリの一部がページ アウトされる可能性があります。どのように対処する予定ですか?

非ページ プールを介して非ページ可能メモリを使用する方法がありますが、(a) このプールは比較的小さく、(b) デバイス ドライバーによって使用され、カーネル内からしか使用できない可能性があります。また、システムがそれほど安定していないことを確認したい場合を除き、大きなチャンクを使用することもお勧めしません。

独自の VMM を記述したり、Windows マシンをより多くのメモリを備えた DOS ボックスに変えたりする前に、アプリケーションの設計を再検討し、メモリがディスクにページングされる可能性を回避することをお勧めします。

于 2009-12-09T11:51:33.273 に答える
0

ああ。非ページ プール (プロセスにスワップまたは割り当てることができない RAM の量) は通常 256 MB です。これは、2 GB のマシンで RAM の 12.5% に相当します。物理 RAM のさらに 90% がプロセスに割り当てられる場合、他のすべてのアプリケーション、サービス、カーネル、およびドライバーには -2.5% が残ります。アプリに 85% しか割り当てないとしても、残りは 2.5% = 51 MB だけです。

于 2010-07-08T15:14:59.013 に答える