Asp.Net

パフォーマンスとスケーラビリティに関する問題

過度のアロケーション

メモリを要求ごとに過度に割り当てるアプリケーションは、メモリを消費し、必要以上のガベージ コレクションを発生させます。

原因となる可能性

  • タイトなループで += 演算子を使う
  • 過度の文字列連結

処理のブロック

ASP.NET 要求を処理する 1 つのスレッドは、下位呼び出しの戻り値を待つ間、ブロックされて新たなユーザー 要求に対応できなくなります。ブロック呼び出しは、他の受信要求の処理に利用可能なスレッドの数を減らします。

長い時間の処理の回避策

  • 作業をキューに入れて、完了するまでクライアントは作業完了の確認のためにサーバーへのポーリングを行います。
  • 非同期の通信を利用する

遅延バインディング

遅延バインディングは、実行コードを特定し、ロードするために、実行時に追加的なインストラクションを要求します。

大きなページ

ページ サイズが下記のことによる影響を受けます。

  • ページ上のコントロールの数と型
  • データ
  • 画像

不適切なデータ キャッシュ

キャッシュすべきのもの:

  • 静的データ
  • アプリケーション全体で使われるデータ

不適切な出力キャッシュ

出力キャッシュを使用していない場合、または不適切に使用している場合、Web サーバーに回避可能な負担がかかる場合があります。

非効率なレンダリング

HTML コードやサーバー コードを散在させる、ページ ポストバックで不必要な初期化コードを実行する、データの遅延バインディング、といったアプローチは、大きなレンダリング オーバーヘッドの原因となり得ます。

不要な例外を避ける。

例外は、アプリケーションに大きなオーバーヘッドをもたらします。ロジック フローの制御に例外を使ってはなりません。可能な限り、例外を避けるようにコードを設計してください。例えば、ユーザー入力を検証し、例外の発生し得る既知の状況を確認してください。また、不要な処理を避けるため、早い段階で異常終了するようにコードを設計してください。

  • 例外を避けるようにコードを設計する
  • ユーザー入力を検証し、例外の発生し得る既知の状況を確認してください。例外を避けるようにコードを設計してください。
  • ロジック フローを制御するために例外を使わないようにする

通常のアプリケーション ロジック フローを制御するために例外管理を使うことは避けてください。

  • すべての例外についてグローバル ハンドラに依存しないようにする

例外が発生すると、ランタイムはスタックを操作し、探索します。ランタイムが例外ハンドラを求めてスタックを探索するほど、例外処理に伴う負担は大きくなります。

  • 例外は発生場所の近くでキャッチし処理する

可能な限り、例外は発生場所の近くでキャッチし、処理してください。これにより、スタックでの過剰かつ高くつく探索と操作を避けることができます。

  • 処理できない例外をキャッチしない
  • 高くつく作業を避けるために早い段階で異常終了する

依存するタスクが異常終了した場合に、高くつく、または所要時間の長い作業を回避できるようにコードを設計してください。

  • 管理者のために例外を詳しくログする

例外ログメカニズムを実装し、管理者や開発者が問題を特定して是正できるように、例外に関する詳しい情報を記録してください。

  • ユーザーに対する例外の詳細情報の表示を避ける

ユーザーに対し、詳しい例外情報を表示しないようにし、セキュリティを保つと共にクライアントへ送るデータ量を抑えてください。

ラウンド トリップ数を減らす。

HttpResponse.IsClientConnected

要求の処理および負荷の大きいサーバー側処理の実行の前に、クライアントがまだ接続されているかを確認するのに、 HttpResponse.IsClientConnected プロパティを使うことを検討してください。

キャッシング

アプリケーションが静的、またはほぼ静的なデータを取得、変換、レンダリングする場合、キャッシングによって余計なヒットを回避できます。

揮発性データと不揮発性データを分ける、操作支援やヘルプ システムなどの静的コンテンツをカプセル化し、揮発性の高いデータと別にするように、ユーザー コントロールを設計してください。これにより、静的データのキャッシュが可能となり、サーバーへの負荷を小さくすることができます。

正しいキャッシング メカニズムを選択する

  • ユーザー独自データは、Session オブジェクトに格納されます。
  • 静的ページや、エンドユーザーにカスタマイズできないの一部の動的ページは、ASP.NET の出力キャッシュや応答キャッシュにより、キャッシュできます。
  • ページの静的コンテンツは、出力キャッシュとユーザー コントロールの組み合わせにより、キャッシュできます。

Server.Transfer

可能な限り、Response.Redirect メソッドの代わりに Server.Transfer メソッドを使ってください。

Response.Redirect は、応答ヘッダーをクライアントへ送ります。これにより、クライアントは新しい URLにより、再指定されたサーバーに新しい要求を送ります。Server.Transfer は、単純にサーバー側呼び出しをすることにより、この迂回を回避します。

Server.Transfer は、コントロールを同じアプリケーションのページへ移す場合にのみ使えることにも注意してください



ウィジェット型CM動画配信サービス manna [マナ]

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:32:48 (1628d)

yVoC[UNLIMITȂ1~] ECirŃ|C Yahoo yV LINEf[^[Ōz500~`I


z[y[W ̃NWbgJ[h COiq 萔O~ył񂫁z COsیI COze