この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 24448|答える: 0

[出典] . ネットメモリオーバーフロー(System.OutOfMemoryException)。

[リンクをコピー]
掲載地 2019/03/14 21:47:39 | | | |
OutOfMemonryExceptionはいつ発生しますか? もし新しいオブジェクトを作成しようとして、ガベージコレクタが空きメモリを見つけられなければ例外をキャッチできます; また、CLRがメモリを必要とし、システムがそれを提供できない場合も例外がスローされる場合もあります。 しかし現時点では、アプリケーションがエラーを検出できません。

メモリオーバーフロー(OutOfMemoryException)のデバッグ解析。

32ビットオペレーティングシステムのアドレッシング空間は4Gで、そのうち2Gはオペレーティングシステムが占有しているため、ユーザープロセスに残るメモリは2Gのみとなります(これにより、プログラムがロードされる際にイメージが占有する部分が減算され、一般的に約1.6G~1.8Gしか使用できません)。 もしプロセスが実行中にメモリを要求する必要があり、オペレーティングシステムがメモリ領域を割り当てられない場合、.netのSystem.OutOfMemoryExceptionというメモリ切れ例外(プログラムの実行を続けるのに十分なメモリがない場合にスローされる例外)を生成します。 最終的な現れはOutOfMemoryExceptionですが、原因は異なる場合があり、この問題を解決する前に、適切な処方をする前にプロセスの現在のメモリ使用状況を分析し、正しい原因を見つける必要があります。 こうした問題をデバッグするためのいくつかのヒントをご紹介します。

詳細については、以下をご覧ください:http://blog.csdn.net/lazyleland/article/details/6704661

IIアプリケーションプールのメモリオーバーフローエラーシステム。OutOfMemoryException

ASP.NET ウェブサーバーでは、ASP.NET が使用できるメモリ量は通常、すべてのメモリ量と等しくありません。 machine.configの設定ファイルには<processModel>「memoryLimit」というプロパティがあり、このプロパティの値はパーセンテージで、デフォルトは「60」です。つまり、ASP.NET プロセス(タスクマネージャーで ASP.NET プロセスが見えます。aspnet_wp IIS5、w3wpはIIS6で)は物理メモリの60%を使用可能です。 ASP.NET が使用しているメモリ量がこの制限を超えると、IISは自動的にプロセスをリサイクルし、Httpリクエストを処理する新しいプロセスを作成し、古いプロセスが占有していたメモリを回収します。

大容量メモリのサーバーがある場合、「memoryLimit」の値を適切に調整する必要があります。 例えば、chemas-microsoft-com ffice marttags" />t="on"> 4Gメモリを準備すると、t="on">4G×60%=t="on">2.4G。 しかし、Win32オペレーティングシステムでは、プロセスが占有できるメモリ領域はt="on">2Gのみです。 ASP.NET プロセスが占有するメモリがt="on">2Gに達し始めると、t="on">2.4Gの「リサイクル閾値」に達しないためIISはリサイクルプロセス操作を開始しませんが、Win32の制約によりこのプロセスにより多くのメモリを割り当てることは不可能であり、OutOfMemoryExceptionが実行される可能性が高いです。 これを避けるために、「memoryLimit」を適切に削減し、IISがリサイクル処理を早められるようにしました。

Microsoftは ASP.NET プロセスがメモリの60%を超えないように推奨しており、計算された実際の値はt="on">800M以内にするのが最善です。 とはいえ、4Gメモリ>t="on"のサーバーの場合は、「memoryLimit」プロパティを「20」に設定するのが最適です。 IISがプロセスをタイムリーにリサイクルするための適切なリサイクル閾値を設定することは、サーバー全体の安定運転を確保し、OutOfMemoryExceptionを回避するために非常に重要です。

IIS6では、ASP.NET プロセスのリサイクル閾値はもはや構成セクションの「memoryLimit」プロパティではなく、IISマネージャーのアプリケーションプール設定で決まります。

しかし、これらの構成が正しく設定されていても、OutOfMemoryExceptionsを完全に回避できる保証はなく、その理由は多様で複雑で、例えばメモリ回収操作が時間がかかりすぎる場合もあります。 開発者は常にコードに不必要なメモリを使ったり無駄にしたりしないことを念頭に置くべきです。 :)

もし大容量メモリのサーバーで、Win32のオペレーティングシステムでt="on">2Gメモリの使用制限に苛立っているなら、代替の解決策は2つあります。

  • コンピュータを/3GBモードで起動し、方法参加記事の後のリンクをたどります
  • Windows Server 2003 64bits Edition をご利用ください


メモリオーバーフローを避けるためのいくつかの要素

配列を作成したい場合は、正しいサイズであることを確認してください。

内部使用や新しいホストオブジェクトに十分なメモリを確保してください。

.NET Compact Framework上でプログラミングする場合、パブリック言語ランタイムは内部使用や新しいマネージドオブジェクトのためのメモリが不足するとこの例外を投げます。 この例外を避けるために、64KB以上のメモリを占有する大規模なメソッドの記述は避けるべきです。

過剰な管理メモリ使用は、しばしば以下によって引き起こされます:

  • 大きなデータセットをメモリに読み込むこと。
  • キャッシュエントリが多すぎる。
  • 大きなファイルのアップロードやダウンロード。
  • ファイルを解析する際に正則表現や文字列を使いすぎます。
  • 過剰な閲覧状況。
  • データが多すぎたり、セッション状態が多すぎたりします。
  • この例外は、COMオブジェクト上でメソッドが呼び出され、そのメソッドがセキュアな配列(不定サイズの配列)を含むユーザー定義型を返し、「この操作を完了するストレージ容量不足」という追加メッセージを返すときに発生します。 これは、.NET Frameworkが構造体フィールドを安全な配列型でマーシャルできないためです。


バイト配列の不適切な使用によるメモリオーバーランの例


出力ファイルが特に大きい場合は、System.OutOfMemoryExceptionを直接報告することがあります。 正しい方法はファイルのバイトストリームをセグメント単位で出力することですが、それを行うResponse.WriteFile(filePath)という既存のメソッド asp.net 存在します。

以下が正しい書き方です:

asp.net がメモリオーバーフローを経験した場合、すぐにアプリケーションプールを回収する簡単な対処法があります。 しかし、これで問題が完全に解決するわけではありませんでした。

イメージタイプ(System.OutOfMemoryException)を作成する際のメモリオーバーフロー

エラーコード:System.Drawing.Image myimg=System.Drawing.Image.FromFile(file. フルネーム);

開いているファイルが画像ファイルでない場合に発生する例外:



MSDN:このメソッドは、ファイルに有効な画像フォーマットがない場合や、GDI+がそのファイルのピクセル形式をサポートしていない場合にOutOfMemoryException例外を投げます。

このような異常な情報は簡単に誤解を招きます。

<processModel> 要素

インターネット情報サービス(IIS)のウェブサーバー上で ASP.NET プロセスモデルの設定を設定します。 このセクションはMachine.configファイルでのみ設定でき<processModel>、サーバー上で動作するすべてのアプリケーション ASP.NET 影響します。

警告 この要素に関する情報は「注記」セクションをお読みください。

構造構成の例:

釈義

マネージドコード設定システムは設定を読み込みません<processModel>。 代わりに、管理されていないDLL aspnet_isapi.dllが直接読み込みます。 このセクションの変更はIISを再開した後に適用されます。

ドメインコントローラーに ASP.NET をインストールする場合は、特別な手順を踏む必要があります。そうしないとインストールがうまくいかなくなります。 詳細については、こちらをご覧ください。http://support.microsoft.comナレッジベースのMicrosoftの記事CHS315158「ドメインコントローラーでデフォルトのASPNETアカウントを使えない」ASP.NET あります。

ASP.NET がIIS バージョン6のネイティブモードで動作している場合、IIS 6のプロセスモデルを使用し、<processModel>セクションの設定は無視されます。 プロセス識別、リサイクル、その他のプロセスモデル値を設定するには、Internet Services Managerのユーザーインターフェースを使ってアプリケーション用のIISワーカープロセスを設定してください。

時間の値は「hours:minutes:seconds」とフォーマットされています。 コロンなしで1つの数字だけが与えられている場合、その値は分とみなされます。 したがって、タイムアウト="4"はタイムアウト="00:04:00"と同等です。

ASP.NET アプリケーションがワーカープロセス(Windows 2000およびWindows XP ProfessionalのAspnet_wp.exe、Windows Server 2003のW3wp.exe)を ASP.NET 再起動させ、デッドロック状態が疑われるエラーメッセージを出した場合、その再起動は増加すべきです responseDeadlockInterval設定。

ユーザー名とパスワードをレジストリに保存します

ユーザー名とパスワードをレジストリに保存します

ユーザー名とパスワードを暗号化し、レジストリに保存するには、ユーザー名とパスワードを以下のように設定します。

userName="registry:HKLM\Software\AspNetProcess,Name"

password="registry:HKLM\Software\AspNetProcess,Pwd"

キーワードレジストリの後、カンマの前に来る文字列の部分は、ASP.NET 開くレジストリキーの名前を示します。 コンマの後には文字列の数値名があり、ASP.NET はそこから認証情報を読み取ります。 コンマは必要で、認証情報はHKLM設定ユニットに保存されなければなりません。 設定が誤ってフォーマットされている場合、ASP.NET ワーカープロセスが起動せず、その後、現在のアカウント作成失敗コードのパスに現れます。

認証情報はREG_BINARY形式でなければならず、Windows API関数CryptProtectDataへの呼び出しの出力を含む必要があります。 暗号化認証情報をレジストリに保存するには、ASP.NET 設定レジストリコンソールアプリケーション(Aspnet_setreg.exe)がCryptProtectDataを使って暗号化を完了します。 Aspnet_setreg.exeおよびVisual C++のソースコードやサポートをダウンロードするには、ウェブサイトをご覧くださいwww.asp.netそして「aspnet_setreg」で検索してください。

暗号化された認証情報を保存するレジストリキーへのアクセスを、管理者とSYSTEMのみがアクセス可能にするように設定すべきです。 レジストリキーはSYSTEMとして動作する ASP.NET プロセスによって読み取られるため、以下の権限を設定する必要があります:

Administrators:F

SYSTEM:F

クリエイターオーナー:F

ProcessAccount:R

これにより、データを守るための2つの防御線が提供されます。

ACL権限は管理者のIDを持つデータへのアクセスを必要とします。
攻撃者はアカウントの認証情報を復元するためにサーバー上でコード(CryptUnprotectData)を実行しなければなりません。



以下の例では、いくつかの設定設定が指定<processModel>されています。

以下の例では、暗号化されたユーザー名とパスワードがレジストリのユーザー定義項目AspNetProcessの下に格納されていることを明記しています。

要件

  • 掲載情報:<system.web>
  • ウェブプラットフォーム:IIS 5.0、IIS 5.1、IIS 6.0
  • 設定ファイル:Machine.config、Web.config
  • 構成セクションハンドラー:System.Web.Configuration.ProcessModelConfigurationHandler


http://doc.51windows.net/iismmc/ ... essmodelelement.htm





先の:C#はアップロードされたファイルが画像かどうかを判定し、トロイの木馬のアップロードを防ぎます
次に:C言語電子書籍コレクション共有
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com