openstreetmap xmlファイルを取り込み、通常は元のサイズの約10%のバイナリランタイムレンダリング形式に変換するコンバータを作成しました。入力ファイルのサイズは通常3GB以上です。入力ファイルは一度にすべてメモリにロードされませんが、ポイントとしてストリームされ、ポリスが収集され、bspが実行され、ファイルが出力されます。最近、大容量のファイルでは、メモリが使い果たされ、死んでしまいます(問題のファイルは1400万ポイントと100万ポリゴンあります)。通常、私のプログラムは、これが起こったときに約1gbから1.2gbのRAMを使用しています。私は2から8ギガバイト(XPで)に仮想メモリを増やしてみましたが、この変更は効果がありませんでした。また、このコードはオープンソースなので、使用可能なRAM(遅くても)に関係なく動作させたい、Windows、Linux、Mac上で動作します。メモリ使用量の多いアプリケーションでメモリが不足しないようにするにはどうすればよいですか?
メモリが不足するのを防ぐためにどのようなテクニックを使用できますか?より小さなサブセットでデータを処理し、最終結果をマージするか?自分の仮想メモリタイプのハンドラを使用していますか?他のアイデア?
Windowsは/ LARGEADDRESSAWAREを使用して3GBの仮想空間を持つことができます –
OSが提供できる*場合、このフラグを使用すると、プロセスは最大4GB *を使用できます。通常、Windowsは各プロセスに2GBしか与えないように設定されています。それはドライバの不安定性のリスクで、あなたも3GBを与えるために変更することができます。 PAEを使用すると、さらに多くの情報を得ることができます。しかし、64ビットはおそらくより良い賭けです。 – jalf
Imho、3番目のオプションが最も重要です。メモリを制御するだけでなく、並列処理も可能です。 – xtofl