2

IIS 6.0、Windows Server 2003 ボックスに同じアプリケーション プールの下にインストールされたアプリケーションのインスタンスが多数あります。それらは同じアセンブリの多くを共有し、単一のアプリケーションに参加することはできません。

最近、アプリケーションの新しいインスタンスを追加し、ASP.NET 2.0 アプリケーションをロードしようとしたときに System.OutOfMemoryException を取得しました。

GAC を使用して一般的なアセンブリを格納すると、このエラーは修正されますか? それとも、異なるアプリケーション プール間にサイトを配置することによってのみ修正できますか?

4

4 に答える 4

1

GAC に何かを配置しても、DLL の物理的な場所 (およびセキュリティ設定) が変更されるだけで、メモリに読み込まれる内容は変更されません。

ほとんどの人は、GAC を「Microsoft が自分たちのものを置く場所」と考える傾向があります。私は、GAC の使用を正当化できる「他のすべての人」によって作成された多くのアプリケーションを見たことがありません。

おそらく、マシンに RAM の負荷がかかる負荷分散ソリューションについて考え始める必要があります。

于 2008-10-27T20:04:38.193 に答える
1

Machine.Config で deployment Retail = "true" が設定されていることを確認します。

<system.web>
    <!--
        <deployment
            retail = "false" [true|false]
        />
    --> 
   <deployment retail="true" />
</system.web>

デバッグ コードは、非デバッグよりも多くのメモリを必要とし、ページごとに 1 つではなく単一のアセンブリにコンパイルすると、アセンブリの読み込みのメモリ オーバーヘッドが削減されます。

アプリケーション プールのメモリ設定が十分に高く設定されていることを確認してください。また、ProcessModel の MemoryLimit 設定も確認してください: http://msdn.microsoft.com/en-us/library/7w2sway1(VS .71).aspx

80% または 85% の設定を使用してみてください。

<processModel 
  memoryLimit="80"
/>
于 2008-11-03T18:00:24.537 に答える
0

共有アセンブリを GAC に配置すると、ドライブ スペースが節約されます。同じ dll を使用する 20 個の ASP アプリケーションがある場合。同じdllのより少ないコピーをメモリにロードする場合もあるかもしれませんが、よくわかりません。とはいえ、OutOfMemoryErrors は、非常に大きなオブジェクトをメモリにロードすることによって発生する可能性が高く、典型的な例は DataSet です。アセンブリは、メモリ内の大きなデータセットまたは大きな xml ファイルで消費できるメモリに比べて小さいです。

于 2008-11-22T14:45:06.617 に答える
0

これはどのタイプのリクエストで発生しましたか? この OutOfMemoryExceptions の一般的な原因について読みたいと思うかもしれません。

于 2008-11-22T15:02:25.647 に答える