1

私はこれをたくさん含むコードベースを持っています:

byte[] contents = FileUtils.FileToByteArray(FileOfGartantuanProportions);

IIS サーバーを制御していないため、システム ログを表示したり、インストルメンテーションを実行したりできません。要求が返されない (死のホワイト ページ) と、メモリ不足エラーを伴う YSOD が表示されることがあります。

IIS5 または IIS6 がワーク プロセスを強制終了するか、単にキール オーバーして終了する前に、メモリにロードできるデータの最大量について経験則を持っている人はいますか?

または、さらに良いことに、次のような API 呼び出しがありますか。

  if(!IsEnoughMemoryFor(FileOfGartantuanProportion.Length)) throw new SomeException() ;

私の XP Pro ワークステーションでは、ASP.NET ページを取得してメモリ内の非常に大きなバイト配列を正常に処理できますが、これらの結果は明らかに実際の共有サーバーには当てはまりません。

4

3 に答える 3

1

ネイティブモードのIIS6を使用すると、各アプリケーションプールの制限を構成できます。

IIS5では、machine.configの要素を使用して、システムメモリ全体のパーセンテージとして構成されます。デフォルトは60%です。

于 2009-05-30T15:33:12.740 に答える
1

IIS 6の場合、メモリリサイクルの制限であるPeriodicRestartPrivateMemoryとPeriodicRestartMemoryに遭遇する可能性があります。XPでは、物理メモリの60%だと思います。少なくともそれは私がasp.net1.1について覚えていることですが、2.0についてはよくわかりません

YSODは、大規模な割り当てを回避するためのtry/catchを使用して処理するのがおそらく最適です。

于 2009-05-30T15:36:37.213 に答える
1

TechEd でのTess Ferrandez の講演によると、プライベート バイトが約 800MB、仮想バイトが 1.4GB の場合、32 ビット サーバーでメモリ不足の例外が発生する可能性があります。

彼女はまた、なぜこれがここにあるのかについての良い投稿をしました:

レストランのアナロジー

彼女が行ったその他のポイントには、セッションにシリアル化するものについての考慮が含まれていました。

于 2009-05-30T20:35:55.107 に答える