C# で記述されたアプリケーション (単一プロセス) があるとします。
デフォルトでは、アプリケーションは必要以上に巨大な仮想メモリを割り当てています (たとえば、常駐メモリは約 10 MB ですが、仮想メモリは約数 GB です)。
Java では、オプションを使用してこれを制限できます。java -mx128m
.net / mono アプリケーションで同じことを行うにはどうすればよいですか? そして、ボーナスの質問: GC オプションを強制/変更して、常にメモリ使用量をできるだけ低く保つことは可能ですか (システムがメモリ不足になっているときではなく、できるだけ早く収集します)。
基本的に私の目標は、最小限のメモリ フットプリントで .net アプリケーションを作成することです。
編集: より明確にするために、ほぼすべての .net アプリケーションに同様の問題があるように思われるため、このシナリオを挿入します。
monodevelop を実行します。これは mono の下で c# アプリケーションです。1800 MB の仮想メモリを消費しますが、常駐メモリは291 MBしか使用しません。これは、アプリケーションが 300 MB 未満のメモリしか使用していないにもかかわらず、不明な理由で 1800 MB を要求したことを意味します。この理由と、それを防ぐ方法を発見したいと思います。
これはおそらくほとんどのユーザーにとっては問題ではありませんが、タスクが仮想メモリによって制限されている場合、SGE などのクラスターで実行されているアプリケーションにとっては問題になる可能性があります。