高性能のASP.NETアプリケーション(rpm)を開発する方法

オリジナルリンク: http://www.cnblogs.com/dingzhiming/archive/2008/09/05/1284982.html
1.データベース・アクセス・パフォーマンスの最適化の 
 
データベースと密接に関連し

ますが、いくつかの操作の接続と密接な接続を開き、接続を作成する必要がデータベース・リソースへのアクセス。これらのプロセスは、サーバーのリソースを消費し、認証される複数のExchangeデータベース情報が必要です。ASP.NETは、オープン改善し、データベースのパフォーマンスに影響を閉じ、接続プール(接続プール)を提供します。接続プール内のシステムユーザーデータベース接続、除去は、所望であれば、閉じられた接続、待ち時間接続要求を撤回しました。接続を最大化するための接続プールがまだ作成が必要な場合は、接続プールのサイズは、制限され、パフォーマンスが大幅に影響します。したがって、唯一のオープン本当に必要なときにだけ、データベース接続を確立した後に動作接続され、データベース接続のオープン時間を最小限に抑えるため、使用後はすぐに閉じて、接続の制限を避けるため表示され上回りました。   

ストアドプロシージャ使用して  
 
サーバプロセスに保存されていることはDOSのバッチファイルシステムに似た保存されたプリコンパイルされたSQL文のセットです。データベース機能への即時アクセスを持つストアドプロシージャは、情報処理は非常に迅速です。その実行計画の最初に実行した後、複数のコンパイルコマンドを避けるために、ストアドプロシージャを使用して、必要なときに、後で簡単にキャッシュに直接バイナリコードを呼び出し、キャッシュに存在します。さらに、修正しやすい独立したASP.NETアプリケーションを、実行中のサーバ・プロセスに保存されている、最も重要なのは、それがのネットワークデータベースのアクション文の送信を減らすことができるということです。

クエリの最適化
  
ASP.NET、ADO接続はかなりのリソースを消費し、SQLステートメントは、システムリソースに長い時間を取って、時間の長い期間を実行します。そのため、実行時間を短縮するために最適化されたSQL文を使用するようにします。たとえば、クエリがインデックスの完全な使用を含むサブクエリステートメントではありません。   

2.文字列操作のパフォーマンスの最適化 
 
値型を使用して、ToStringメソッド
  
多くの場合、「+」記号を使用して接続文字列は、デジタル文字列に直接追加する場合。この方法は、正しい結果を得ることができる簡単であるが、それは、異なるデータタイプに関連し、参照型の所望の数は、パッキング動作を形質転換することにより文字列に追加することができます。しかし、このような処置中など、梱包作業のパフォーマンスに大きな影響は、マネージヒープ内の新しいオブジェクトが新しく作成されたオブジェクトの元の値をコピーするには、割り当てられました。充填操作の値型を使用して、ToStringメソッドは、それによってアプリケーションのパフォーマンスを向上させる、回避することができます。   

使用のStringBuilderクラス   

StringクラスのオブジェクトはBukegaibianで、文字列の再割り当てのためにオブジェクトを、本質的には、再作成するStringオブジェクトとそのメソッドのToStringないパフォーマンスを改善するために非常に重要なオブジェクトに割り当てられた新しい値です。文字列を通じ、好ましくは.NET名前空間はSystem.TextのあるStringBuilderクラスを使用します。このクラスは、操作の結果を返す新しいオブジェクトを作成しませんが、追加して直接文字列を操作するために、ToStringメソッドを通じて、挿入および他の方法を削除します。次のように操作文が定義されて:


int型NUM; System.Text.StringBuilder System.Text.StringBuilder新しい新しいSTR =(); //文字列str.Append(num.ToStringを())を作成; //値のNUMレスポンスを追加します.WRITE(str.ToString); //操作の結果3.最適化のWebサーバーの設定ファイルと、特定のニーズを満たすために、コンピュータ固有のアプリケーションを表示

デフォルトでは、ASP.NET構成は最も広範な機能を有効にしてしようとするように設定されています最も一般的なシナリオに適応します。そのため、アプリケーション開発者は、アプリケーションの機能、最適化を使用してアプリケーションのパフォーマンスを向上させるために、これらの構成の一部を変更することができます。以下のリストは、あなたが考慮すべきいくつかのオプションがあります。

アプリケーションは、認証を有効にする必要があります。

デフォルトでは、認証モードは、Windows、または統合NTLMです。ほとんどの場合、認証を必要とするアプリケーションのために、それは認証Machine.configファイルを無効にし、Web.configファイルで認証を有効にすることをお勧めします。適切なアプリケーションは、要求と応答のエンコード設定するように構成されています。ASP.NETのデフォルトのエンコード形式はUTF-8です。アプリケーションが厳密にASCIIであれば、わずかな性能向上を得るためにASCIIを使用するようにアプリケーションを構成してください。
  
アプリケーションにAutoEventWireup属性を無効にしてみてください。

machine.configファイルであろうAutoEventWireup属性がfalseに設定され、そのページが入射し、(などをPage_Loadなど)2つのフックでメソッド名と一致しないことを意味します。ページの開発者は、これらのイベントを使用する場合(たとえば、代わりにPage_Loadメソッドを使用する、ページロードイベントPage.OnLoadを書き換える必要がある)の基本クラスでこれらのメソッドをオーバーライドする必要があります。あなたがAutoEventWireup属性を無効にした場合、ページは左ページのイベントによって接続されたのではなく、それを自動的に実行されますが、わずかなパフォーマンスの向上を取得します。

処理パイプラインからの要求なしに取り外し可能なモジュール。

デフォルトでは、すべての機能Machine.configファイルサーバコンピュータノードは、活性化のために予約されています。アプリケーションが使用する機能に応じて、あなたはわずかなパフォーマンスの向上を得るために、要求パイプラインから未使用のモジュールを削除することができます。それをカスタマイズするあなたの必要性に応じて、各モジュールとその機能を確認してください。アプリケーションにおける出力バッファとセッション状態を使用しない場合、例えば、それらはコードの各モジュールに入り、出る実行する際に他の意味のある治療ではなく、必要に応じて実行を要求しないように、リストから除去することができます。

4.デバッグモードを無効にしてください  

本番アプリケーションまたは任意のパフォーマンス測定を展開する前に、と常にデバッグモードを無効にすることを忘れないでください。デバッグモードが有効になっている場合は、アプリケーションのパフォーマンスは非常に大きな影響があります。   

5.外部リソースに依存するアプリケーションの広い範囲のために、マルチプロセッサコンピュータでネットワークガーデニングを有効に考える  

ASP.NETプロセスモデルは、マルチプロセッサコンピュータでのスケーラビリティを実現しますが、より多くの作業プロセスに配布されます(各CPU a)に示すように、各プロセスがCPUのためのプロセッサアフィニティを設定します。この技術は、ネットワークのガーデニングと呼ばれています。アプリケーションが遅いデータベース・サーバを使用していますか(ここでは2つだけの可能性言及した)外部依存関係を持っているCOMオブジェクトを呼び出す場合、ネットワークのガーデニングは、アプリケーションが有益である可能でした。あなたがネットワークのガーデニングを有効にすることを決定する前に、しかし、あなたは庭のネットワーク実装でアプリケーションをテストする必要があります。   

、データキャッシュとページの出力が可能な限り6.  

ASP.NETのための単純な機構を提供しますが、彼らは、ページ出力またはデータ出力やデータ・ページは、各ページ要求に対して動的に計算さをキャッシュする必要はありません。さらに、デザイン、ページとデータ要求(特にサイトのトラフィックでは、大きな面積を持つことが期待されている)キャッシュされるべきで、あなたはこれらのページのパフォーマンスを最適化することができます。.NET Frameworkの任意のWebフォームの機能よりも、キャッシングの適切な使用は時々大きさの増加の受注がスーパーで、より良いサイトのパフォーマンスを向上させることができます。注意すべき2つの点があるASP.NETのキャッシュメカニズムを使用してください。まず第一に、あまりにも多くのアイテムをキャッシュしません。各項目のキャッシュは特に、メモリの使用で、オーバーヘッドです。エントリが再計算しやすく、ほとんど使用しないでキャッシュしないでください。第二に、キャッシュエントリの有効性には短すぎない割り当てられました。アイテムはすぐに不要なキャッシュ売上高につながり、そして多くの場合、コードのクリーニングとガベージコレクションの仕事につながる有効期限が切れます。懸念この問題場合は、キャッシュの総売上高レートパフォーマンスカウンタに関連付けられたASP.NETアプリケーションのパフォーマンスオブジェクトを監視します。高い離職率は、項目が満期前に削除されている場合は特に、問題がある可能性があります。これは、メモリ圧力として知られています。


7.適切なページやアプリケーションのデータ・ビュー・メカニズムを選択  

Webフォームページモードでの表示データの選択に応じて、利便性とパフォーマンスの間でしばしば重要なトレードオフがあります。たとえば、DataGridのWebサーバーコントロールは、データを表示するための便利な方法かもしれませんが、コストパフォーマンスの面で、それは多くの場合、最大です。いくつかの簡単な例では、適切なHTMLの描画データを生成することによって、自分自身は非常に効果的であることができますが、カスタマイズや、ブラウザの向きはすぐに得られ、追加の効果によって相殺されます。リピータWebサーバーコントロールは、利便性とパフォーマンスの間の妥協です。それは、効率的なカスタマイズおよびプログラム可能です。   

8.高速データのみカーソルためSqlDataReaderのクラス  

SqlDataReaderのクラスのみSQL Serverデータベースから取得したデータストリームを読み取るための提供。場合は、あなたがASP.NETアプリケーションを作成するとき、あなたはSqlDataReaderのクラスは、DataSetクラスよりも高いパフォーマンスを提供しています表示された場合に使用することができます。このような状況の理由、SqlDataReaderのは、直接SQL Serverのネイティブネットワークのデータ転送フォーマットを使用してデータベースからデータを読み取るために接続されているので。また、SqlDataReaderのクラスはまた、あなたがサーバーコントロールにデータをバインドすることができますIEnumerableインターフェイスを実装します。詳細については、SqlDataReaderのクラスを参照してください。ASP.NETデータに関する情報にアクセスする方法を、介してデータにアクセスするためのASP.NETを参照してください。   

9. SQL Serverのデータにアクセスするためのストアドプロシージャ  

の.NET Frameworkで提供されるすべてのデータアクセス方法には、SQL Serverベースのデータ・アクセスは、高性能でスケーラブルなWebアプリケーションを推奨選択肢を生成することです。管理SQL Serverのプロバイダを使用するときは、コンパイルされたストアドプロシージャの代わりに、アドホッククエリを使用して追加のパフォーマンスの向上を得ることができます。   

10.避けるシングルスレッド手段(STA)COMコンポーネント  

デフォルトでは、ASP.NETは、ページ内で実行するすべてのSTA COMコンポーネントを許可していません。それらを実行するには、.aspxのファイルASPCOMPAT @ Pageディレクティブで= true属性内でなければなりません。STAは、スレッドプールを用いて、このようなスレッドプールへのハンドオーバを実行するだけでなく、のHttpContextおよび他の目的は、COMオブジェクト用に構築することができるであろう。それはすべての呼び出しSTAスレッドをマーシャリングするために、マルチスレッドユニット(MTA)を避けるため、前者は、また、パフォーマンスの最適化です。パフォーマンスが大幅に損傷を与える可能性がSTA COMコンポーネントを使用して、避けるべきです。あなたは、このような任意の相互運用のシナリオのようにSTA COMコンポーネントを、使用する必要がある場合、それは多数のコールの実行中に行われ、それぞれの呼び出しの間にできるだけ多くの情報を送信する必要があります。また、建設ページ中の任意のSTA COMコンポーネントを作成しないように注意してください。たとえば、ページの構造は、スレッドが作成したMySTAComponentをインスタンス化され、スレッドがSTAスレッドではありません次のコードは、ページを実行します。建設ページがMTAとSTAスレッド間でマーシャリングを完了しなければならないので、これは、パフォーマンスに悪影響を及ぼす可能性があります。


新しいMySTAComponentとしてDIM MYCOMP()パブリック サブをPage_Load()myComp.Name =「ボブは、」サブ終了


好ましい機構は、次の例に示すように、STAスレッドの下でコードを実行した後まで延期オブジェクトを作成することです。


薄暗いMYCOMPます。Public Sub Page_Loadの()MYCOMP =新しいMySTAComponent()myComp.Name = "ボブ" End Subの

推奨されるアプローチは、必要なときにPage_Loadメソッド内の任意のCOMコンポーネントと外部リソースまたはを構築することです。共有リソースは、内部へのアクセスをその他のスレッド以外のスレッドによって構築することができる任意のSTA COMコンポーネントに格納すべきではありません。このような資源は、キャッシングやセッション状態のリソースとして含まれています。STAスレッドは、STA COMコンポーネント、スレッドが実際に作成者スレッドへの呼び出しをマーシャリング必要とするサービスのために呼び出すことができ、このSTA COMコンポーネントの構造のみを呼び出す場合でも。このマーシャリングは、パフォーマンスとスケーラビリティの問題の重大な損失を与える可能性があります。この場合、COMコンポーネントを作成する可能性を見てくださいMTA COMコンポーネントになる、またはより良い方法は、オブジェクト管理対象オブジェクトを作成するコードを移行することです。   

11.コール集約型のCOMコンポーネントは、マネージコードへの移行  

.NET Frameworkの伝統的なCOMコンポーネントと対話するための簡単な方法を提供します。利点は、既存の投資を維持しながら、新しいプラットフォームを活用することができるということです。しかし、いくつかのケースでは、古いコンポーネントのパフォーマンス・オーバーヘッドは、コンポーネントがそれだけの価値があるマネージコードへの移行になり続けます。それぞれの状況は、移行コンポーネントは、Webサイト上での性能測定を実行するかどうかを判断するための最良の方法は同じではありません。私はあなたがマネージコードに移行するように相互作用する任意のCOMコンポーネントへの呼び出しの多くを必要とする方法を見てすることをお勧めします。多くの場合、特にWebアプリケーションの最初の移行時に、マネージコードにレガシーコンポーネントを移行することは不可能です。この場合、管理された環境をマーシャリング管理されていない環境からのパフォーマンスデータへの最大の障害の一つ。したがって、相互作用、そして大きなコールではなく、小さな一連の呼び出しを両端にできるだけ多くのタスクを実行し、そして。例えば、共通言語ランタイムのすべての文字列がUnicodeあるコールがUnicode形式にすべての文字列を変換するコードコンポーネントを管理する前に、それはする必要があります。さらに、それらを解放するために、任意のCOMオブジェクトやネイティブリソースを処理しました。このように、他の要求にそれらを使用すると、ガベージコレクタをリリース後の彼らの要求によるパフォーマンス上の問題を最小限に抑えることが可能です。   

12. Visual Basic .NETまたはJScriptで事前バインディング。タグ  

過去には、開発者は、Visual Basic、VBScriptの。およびJScriptを使用することを好む。理由の一つは、彼らは自然の中で「何のタイプ」は、いわゆるされていないということです。変数は、明示的な型宣言を必要としない、およびそれらを使用して簡単に作成することができます。もう1つのタイプから分配するとき、変換が自動的に行われます。しかし、この利便性は大幅にアプリケーションのパフォーマンスを損傷します。Visual Basicは今オプション厳格なコンパイラディレクティブを使用することにより、タイプセーフなプログラミングをサポートしています。下位互換性を維持するために、デフォルトでは、ASP.NETは、このオプションを有効にしません。しかし、最高のパフォーマンスを得るために、強くあなたがページでこのオプションを有効にすることをお勧めします。strictオプションを有効にするには、厳格なプロパティは、ユーザーコントロールのために、プロパティは、@ Controlディレクティブに含まれ、@ Pageディレクティブに含まれ、またはしてください。次の例では、このプロパティを設定する方法を示しており、このプロパティを使用する方法を示すことと呼ばれる4つの変数は、コンパイルエラーが発生します。

JScriptの。.NETは、非型プログラムをサポートしていますが、それは必須では事前バインディングコンパイラ・ディレクティブを提供していません。次のいずれかが発生した場合、変数は遅延バインディングです:明示的にオブジェクトとして宣言し、型指定されていないクラスフィールドは、関数の明示的な型宣言または専用のメソッドのメンバーではありませんし、その使用はすることはできません推論されたタイプ。JScriptの。.NETコンパイラは、使用状況の変数に基づいて型を推測できる場合は、それが最適化されるので、最後の違いは、より複雑です。次の例では、変数Aは、事前バインディングですが、変数Bは、遅延バインディングです。

VaRのA、Bのvar; A = "こんにちは"; B = "世界"; B = 0; 最適なパフォーマンスのために、時間のステートメントのJScript .NET変数、タイプを割り当てます。例えば、VaRのA:文字列。

ラインで可能な限り効率的にすべてのモジュール13のリクエスト  

要求パイプライン内のすべてのモジュールは、すべての要求はチャンスを持って実行されます。リクエストが入り、離れたときので、すぐにコードモジュールをトリガー特にコードパスで、不可欠であるモジュールの関数を使用していません。それを行う際に、これらの方法の実行の速度を決定するために有用とおよびプロファイルがなく、スループット試験モジュール。

14.同じアプリケーションのページ間HttpServerUtility.Transferリダイレクションを使用する方法  

Server.Transferの構文を使用して、不要な避けるために、ページ内で使用される方法は、クライアントをリダイレクトします。
  
各ワーカー・プロセスの調整アプリケーションスレッド15は、必要な数の場合  

ASP.NETの要求構造は、利用可能なリソース及び実行のスレッドの数との間のバランスを達成しようとします。同時に実行される要求の数を決定することができ、十分なCPUパワーアプリケーション、要求のための利用可能なCPUパワーに応じた構造を用いることが知られています。この技術は、スレッドゲーティングとして知られています。ただし、一定の条件の下で、スレッドゲーティングアルゴリズムは非常に効果的ではありません。パイプラインインスタンスがASP.NETアプリケーションのパフォーマンスに関連するオブジェクトを使用してパフォーマンスカウンタをカウント、それがパフォーマンスモニタのスレッドゲーティングで監視することができます。ページは、データベースへのアクセスやXML Webサービス要求などの外部リソースに呼び出すと、ページ要求は、一般的に停止し、CPUを解放します。リクエストが処理されるのを待って、スレッドプールのスレッドがある場合は無料ですが、その後、待機が開始され、要求が処理されます。残念ながら、時にはこれは要求の数と同時処理スレッドの数が多いにつながることができ、Webサーバー上の存在を待っているが、彼らは、サーバーのパフォーマンスに悪影響を及ぼしています。ゲーティング率が外部リソースへの応答時間であれば一般的には、その後、リソースを待ってあまりにも多くのリクエストを聞かせて、Webサーバのスループットは役立ちません。このような状況を緩和するために、あなたは、手動のプロセス内のスレッドの数に制限を設定する属性のMachine.config設定ファイルノードmaxWorkerThreadsとmaxIOThreadsを変更することができます。   

注意:ASP.NETワーカースレッドが要求を処理するために使用され、IOスレッドがデータベースやXML Webサービスからのファイルのために使用されているが、データサービスを提供し、。これらのプロパティに割り当てられた値は、CPUあたりのスレッドの各タイプの最大数のプロセスです。デュアルプロセッサコンピュータの場合は、二倍の最大設定値です。4プロセッサコンピュータの場合、最大値は4倍の設定値です。いずれの場合も、コンピュータは4つまたは8つのCPUを持っている、それはデフォルト値を変更するのが最善の方法です。1個のまたは2のプロセッサを搭載したコンピュータの場合、デフォルト値はすることができますが、より多くのパフォーマンスコンピュータプロセッサがあり、百または200スレッドのプロセスが良いよりも害です。プロセスではなく、要求を扱うの保守スレッドに費やさオペレーティングシステムのCPUサイクルの原因となりますので、追加のコンテキストスイッチのサーバーが遅くなる傾向にある中で、あまりにも多くのスレッドがあることに注意してください。   

16.共通言語ランタイムのガベージコレクタと自動メモリ管理の適切な使用  

このガベージコレクタは、より頻繁に多くの作業を行う必要がありますように、それぞれの要求にあまりにも多くのメモリを割り当てることがないようにご注意ください。また、対象物への不必要なポインタをしない、彼らはアクティブなままになります、そして、彼らは、後でより多くの仕事につながるためのFinalizeメソッドを持つオブジェクトを回避しようとすべきであるため、オブジェクト。それはゴミが収集される前に、リソースはメモリによって消費された可能性があるため、特にファイナライズ呼び出しで、リソースを解放しないでください。ファイナライズ処理を待っている間、特定のリソースを使い果たすことは容易であるため、この最後の問題は、多くの場合、打撃を壊滅的なWebパフォーマンスサーバ環境を持っています。   

17.あなたが大規模なWebアプリケーションを持っている場合は、事前にバッチコンパイルを実行を検討  

ディレクトリへの最初の要求は、バッチコンパイルを実行しますたびに発生します。ディレクトリページが分析され、コンパイルされていない場合は、この機能は、すべてのバッチページを分析し、ディスクとメモリをより良く利用するためにディレクトリをコンパイルします。それは長い時間がかかる場合は、その後すぐに分析し、要求を処理できるように、単一のページをコンパイルします。多くのページを単一のアセンブリにコンパイルされるため、この機能は、ASP.NETのパフォーマンスのメリットをもたらします。新しいページ速いアセンブリよりも読み込みにロードされたアセンブリのアクセスから。バッチコンパイルの欠点は、次のとおりです。サーバーがWebサーバーとは、彼らの分析をコンパイルする場合、パフォーマンスが低下する可能性があり、その後、多くの要求がまだページがコンパイルされていない受信した場合。この問題を解決するには、事前にバッチコンパイルを実行することができます。それを有効にするには、アプリケーションがページを要求する直前に、これを行うには、関係なく、どのページのことができます。ユーザーが最初にあなたのサイトを訪問するときに、ページおよびアセンブリがコンパイルする必要があります。バッチコンパイルが発生したときに知っている簡単なメカニズムはありません。あなたは、CPUがアイドル状態であるか、それ以上のコンパイラプロセス(例えばcsc.exe(C#コンパイラ)またはvbc.exe(Visual Basicのコンパイラ))を開始しなくなるまで待つ必要があります。また、アプリケーションのアセンブリbinディレクトリの\を変更しないようにしてください。ページを再分析し、ページをコンパイルし、アセンブリの\ binディレクトリは完全な再コンパイルバッチディレクトリにつながる置き換えるためにつながる変更します。大規模なサイトでは、多くのページが含まれている上、より良いアプローチは、ページまたは別のディレクトリ構造を設計するためのアセンブリ計画を交換する頻度に基づいてされる可能性があります。あまり変更されないページが同じディレクトリ内の特定の時点で保存し、前のバッチコンパイルすることができます。ページはすばやく自分のディレクトリをコンパイルする(ディレクトリあたり数百ページまで)頻繁に変更する必要があります。Webアプリケーションは、多くのサブディレクトリを含めることができます。バッチコンパイルはディレクトリレベルではなく、アプリケーションレベルで発生します。

18.あなたのコードで例外に依存しないでください  

異常な性能が大幅に削減されているので、あなたは、通常のプログラムの流れを制御する方法として、それらを使用しないでください。それが意図的でない可能性があり、ステータスコードを検出することが可能である場合は、この操作を実行します。状態自体を処理する前に例外をキャッチしないでください。一般的なプログラムが含まれます:文字列のデジタル値に割り当てられた値を分析し、または数学を適用する前に特定の値をチェックします、ヌルをチェックしてください。次の例では、コードを示し、コードの状態のいくつかの種類があるかどうか異常試験につながります。どちらも、同じ結果を生成します。


 {結果= 100のtry / NUM;}キャッチ(例外E){結果= 0;} // ...このIF結果= 100 / NUMに(NUM = 0!);他の結果= 0;

19.使用のHttpResponse .WRITE文字列連結方法は、

この方法は非常に効果的な緩衝液および接続サービスを提供します。ただし、接続の広い範囲を実行する場合、複数のResponse.Write呼び出しを使用しています。次の例に示す技術は、単一の呼接続のResponse.Writeメソッドを文字列よりも高速です。


Response.Writeを( "A"); Response.Writeを (のmyString); Response.Writeを( "B"); Response.Writeを(myObj.ToString()); Response.Writeを( "C"); Response.Writeを(myString2 ); Response.Writeを(「D」) ; 20. バッファーを閉じるために、特別な理由がある場合を除き、それ以外の場合は開いたまま

Webフォームページバッファを無効にするには、パフォーマンス上のオーバーヘッドの多くを引き起こす可能性があります。   

21。  

往復の上に自分の財産の価値を再作成するためにサーバーコントロールを可能に自動ビューステート管理機能サーバ制御機能(あなたが任意のコードを記述する必要はありません)。ただし、サーバー上の隠しフォームフィールドにサーバーコントロールのビューステート往復ので、ので、この機能は、パフォーマンスに影響を与えません。あなたは状態がビューを助けるれる状況、それがパフォーマンスのページに影響する状況を知っている必要があります。あなたは各ラウンドトリップでデータをサーバーコントロールのバインドを持っている場合、それは保存されたビューステート結合を置き換えることで得られたデータから、新しい値で動作します。この場合、ビューステートが無効になっている処理時間を節約できます。デフォルトでは、ビューステートは、すべてのサーバーコントロールのために有効になっています。ビューステートを無効にするために、コントロールのEnableViewStateプロパティは、次の例で図示データグリッドサーバーコントロールと同様に、falseに設定されています。


また、ページ全体のビューステートを無効にするには、@ Pageディレクティブを使用することができます。:あなたが有用であろうサーバーにポストバックページからない場合


注意:コントロールディレクティブはまた、EnableViewStateプロパティをサポートしています@、ディレクティブを使用すると、ビューステートがユーザーコントロールを有効にするかどうかを制御することができます。、サーバーコントロールの状態にページ解析の数を使用して表示(@ Pageディレクティブでトレースすることにより=「true」属性)には、追跡ページを有効にしてのViewStateコラムコントロールの階層テーブルを表示します。トラックとどのようにASP.NETのトレースを参照してください、それを有効にする方法について。

サーバーへ22.避けて不要なラウンドトリップ  

あなたは、ASP.NETサーバーコントロールとポストバックイベント処理を使用してはならない、おそらくそれらの機能のWebフォームページフレームワークを使用して、時間とコードを節約するために、できるだけ多くをしたいが、いくつかのケースではなく、けれども。通常、検索したり、データを保存するときにだけ、あなただけのサーバーへのラウンドトリップを開始する必要があります。データ操作のほとんどは、これらのプロセス間のクライアントのラウンドトリップで実行することができます。例えば、クライアントの前にHTMLのフォームの検証からは、通常のデータでサーバーへのユーザー入力を提出することができます。データベースにサーバに情報を渡さない場合は一般的に、あなたはストアドプロシージャにしてからつながるコードを書くべきではありません。カスタムサーバーコントロールを開発する場合、ECMAScriptのを支援するためにそれらを検討します。ブラウザがクライアントコードを提示しています。このように、サーバーコントロールを使用することによって、あなたは、大幅にWebサーバ情報に送信された番号は不要である減らすことができます。

使用Page.IsPostBackはに対処するために、不必要なラウンドトリップの実行を回避

しますが、サーバーコントロールのポストバック処理書込み処理、そして時には、ユーザーがページ内のHTMLウィンドウを送信するときに、最初のページを要求した際に追加のコードを実行する必要がある、というよりも可能性がある場合、コードボディ実行されるコード。ページがサーバーコントロールのイベントに応答して生成されているかどうかによります。

条件付きでコードを実行するためにPage.IsPostBackプロパティを使用

例を、次のコードは、ページがデータグリッドサーバーコントロールにデータをバインドするために要求された最初の時間であるデータベース接続とコマンドを作成する方法を示しています。


空をPage_Load(オブジェクト送信者、EventArgsの電子 (Page.IsPostBackが!){文字列のクエリ=「選択姓『%JUSTINの%』のような作家から*」場合){//ここに接続し、コマンドを設定し;. myCommand.Fillを( DS、「作成者」); myDataGrid.DataBind ();}}

Page_Loadイベントは、コードチェックIsPostBackプロパティプロパティがfalseに設定されているすべての要求を実行するため。yesの場合、コードを実行します。このプロパティをtrueに設定すると、コードが実行されません。このチェックを実行しない場合は、ページのポストバックの動作が変更されないことに注意してください。Page_Loadの実行サーバーコントロールのイベントを実行する前に、コード内のイベントが、それは、出力ページに表示されることがあり、サーバーコントロールのイベントの結果だけ。あなたは、このチェックを実行しない場合は、Page_Loadイベント処理とページ上の任意のサーバーコントロールのイベントのために実行されます。   

23.使用していないセッション状態のときにそれを無効にし  

、すべてのアプリケーションやページではないが、特定のユーザにセッション状態のために必要とされている、あなたが任意のプログラムに適用すべきか、ページがセッション状態を無効にするには、セッション状態を必要としません。セッション状態のページを無効にするには、@ PageディレクティブのにEnableSessionStateプロパティがfalseに設定されています。例えば:


注意:ページがセッション変数にアクセスする必要がありますが、それらを作成または変更するつもりはない場合は、にEnableSessionStateプロパティは読み取り専用にPageディレクティブ@設定されます。また、セッション状態XML Webサービスメソッドを無効にすることができます。詳細については、作成したXML WebサービスのASP.NETとXML Webサービスクライアントを使用するを参照してください。アプリケーションのセッション状態を無効にするには、アプリケーションのWeb.configファイルのモード属性を設定しますてsessionState構成セクションではオフになっています。たとえば:


24慎重にセッション状態プロバイダを選択  

してインプロセスセッション状態をWindowsサービスプロセスセッション状態およびSQL Serverデータベースインプロセスセッションとして:ASP.NETはセッションデータアプリケーションを格納するための3つの異なる方法を提供します状態。各メソッドは、独自の利点を持っていますが、インプロセスセッション状態は、これまでで最速のソリューションです。セッション状態揮発性データの少量のみに保存されている場合、あなたがインプロセスプロバイダを使用することをお勧めします。プロセス・ソリューションのうち、主にアプリケーションを拡張するために複数のプロセッサまたは複数のコンピュータに使用されている、またはサーバーまたはプロセスの再起動時にデータの損失は使用できません。詳細については、ASP.NETの状態管理を参照してください。   

25.不要なコントロール・サーバーを使用していない

サーバー側のコントロールを操作するすべてのユーザーが、それは往復とサーバー側を作成するため、プログラム開発を容易にするため、サーバー側のコントロールの多数をASP.netのを、だけでなく、パフォーマンスの低下をもたらす可能性があります。したがって、非本質的な、それはあまりServer Controlを使用する必要があります。   

26. ASP.NETアプリケーションのパフォーマンス・テスト  

パフォーマンステストのASP.NETアプリケーションの前に、アプリケーションがエラーがないことを確認し、適切に機能しなければなりません。特定のパフォーマンステストは、以下のツールを使用して行うことができます。WebアプリケーションStreesツール(WAS)は、Microsoftが無料のテストツールはhttp://webtool.rte.microsoft.com/からダウンロードすることができリリースです。これは、テストの目的を達成するために、数百人のユーザーが同時に、TTFB平均、平均TTLB他のパフォーマンス・サマリー・レポートを生成することができ、サーバー上のWebアプリケーションの要求、形成されたトラフィック負荷にアクセスすることをシミュレートします。アプリケーションセンターテスト(ACT)テストツールである、ビジュアルStudio.NETのエンタープライズ版に付随する、Microsoftが正式にWebアプリケーションのテストツールをサポートしています。これは、直感的にされた関数よりも多くの結果を示すグラフを生成することができますが、同時に複数のクライアントをテストする能力を持っていません。「パフォーマンス」カウンターでServerオペレーティングシステム、「管理ツール」、アプリケーションのパフォーマンスを理解するために、サーバを監視することができます。   

結論:

Webサイトの開発者のための、ASP.NETアプリケーションのパフォーマンスの問題を書くときに注意を払う、良い習慣を開発し、アプリケーションのパフォーマンスを向上させる、あるいは少なくともサイトのコストを削減するために必要なハードウェアのアップグレードを延期します。

ます。https://www.cnblogs.com/dingzhiming/archive/2008/09/05/1284982.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30642561/article/details/95048914