2009-03-18 10 views

答えて

0

このスレッドをご覧ください:Maximum Heap size - 唯一の解決策は、より多くのメモリをプラグインすることです。

11

This threadは、あなたが望むもののように見えます。

私がMVPの投稿を正しく読んでいる場合、32ビットシステムでは、何があっても1.5GBのヒープサイズに制限されています。あなたのヒープは本質的に無制限の64ビットシステムでは、私は主流のサーバーやPCが、64ビットプロセスが扱うことができるだけの物理メモリを保持できるとは思いません。

+1

ヒープのサイズを設定した量に制限する場合はどうすればよいですか? –

+0

アセンブリをx64または任意のCPUに構築してください。あなたがx64 OS /ハードウェアでさえもx86に構築するならば、1.5GBの制限があります。 – Despertar

+0

私はOPが、.NETアプリケーションのヒープを256MBだけに制限する方法を尋ねていると思います。彼はそれを行う引数/設定/環境変数があるかどうかを尋ねていますが、必ずしもヒープを増やすだけではありません。 –

5

私が見つけた限り、CLRを使用して.NETアプリケーションのヒープのサイズを制御する簡単な方法はありません。

@ Daveさんの答えの半分は質問に答えます。私がこの同じ問題を調査したとき、応答は "最大ヒープサイズを制御する唯一の理由であるかのように、"ヒープは使用可能なすべてのメモリを使用するようになります "という応答です。

(通常はJava)サーバー環境では、他のホストされているアプリケーションを犠牲にして、悪い動作をするアプリケーションがメモリを奪いたくないようにします。簡単な解決策は、アプリケーションがヒープに使用できるメモリの量を制限することです。これは、Javaの-Xmx引数を使用して実行されるため、アプリが計画されているものより多くを使用することはありません。 -Xmx256M。初期化中にヒープ上にメモリを割り当てると、アプリケーションの起動が遅くなるため、Javaは-Xms引数を使用して、初期化時にオブジェクト作成の多くを行うアプリケーションがJVMではなくヒープのブロックで開始するようにします行く。

.NetのCLRにはこの機能がありません。 NETのCLRは仮想マシンではないからだと思う。 CLRは、メモリ管理に関しては実行可能プログラムに似ているアプローチに匹敵するネイティブの.dllへのアダプタとして機能するAPI(非常に包括的ですが、私が追加するかもしれません)です。

私はSharePoint開発についてこの質問をしてきました.Web AppsというIISモジュールを使用してheapsizeを制御し、特定のWebアプリケーションのメモリを制限するようIISに指示することができると聞いてきました。 IISがnew()/ malloc()/ etcを置き換える/オーバーライドするルーチンをカスタマイズしているため、このタイプの制御をクライアントアプリケーションに提供できるため、これが問題なのでしょうか。つまり、スタンドアロンの.Netアプリケーションは、C++でカスタムメモリマネージャを作成して.Net用のインターフェイスを作成しない限り、運が悪いということです。

CLRプログラムは、プロセスが実行されます。そのため、IISは実際にはCLRコードを実行する環境を提供するホストプロセスなので、IIS内からC#Webページのメモリ使用量を制御する必要があります。

関連する問題