推奨:ASP.NET 2.0 URLマッピングを適切に利用してくださいはじめに:URLマッピングは、ASP.NET 2.0で提供される新機能です。 URLマッピングテクノロジーは、特定のURLを別のURLにマッピングするのに役立ちます。理解するために、ホームページにアクセスするためにサイトにhomepage.aspxというページがあると仮定しましょう。
9.3.5データキャッシュまず第一に、データキャッシュとレコードセットの両方のキャッシュの両方がパフォーマンスを改善するために使用されますが、2つは無関係であることに注意することが重要です。データキャッシュは、新しいデータを再生する代わりに、キャッシュ内のデータを使用できる一時的なデータストレージ領域です。これは、頻繁に変更されていないが複数回アクセスされるデータにのみ適用されます。
ASPでデータをキャッシュする最も簡単な方法の1つは、アプリケーションとセッション全体の変数を使用することです。たとえば、本の種類を選択する必要があるWebページがいくつかあるとします。通常の状況では、以下の機能を備えたファイルを作成することができます。
<%
functionbooktypes()
dim rsbooktypes
薄暗いstrquote
strquote = chr(34)
rsbooktypes = server.createObject(adodb.Recordset)を設定します
'本の種類を入手してください
rsbooktypes.open usp_booktypes、strconn
Response.write <select name =&strquote&lstbooktype&strquote&>
rsbooktypes.eofではありません
respons.write&<option>&rsbooktypes(type)&</option>
rsbooktypes.movenext
ウェンド
respons.write&</select>
rsbooktypes.close
rsbooktypes = Nothingを設定します
エンド関数
%>
これは、選択リストの作成中に本の種類を取得するためのストアドプロシージャを単に呼び出すことです。上記のコードの欠点は、関数が呼び出されるたびにデータベースにアクセスする必要があることです。したがって、この関数を再構築します。
<%
functionbooktypes()
dim rsbooktypes
薄暗いstrquote
DIM STRLIST
'リストがキャッシュにあるかどうかを確認します
strlist = application(booktypes)
strlist = thenの場合
'キャッシュされていないので、リストを作成してキャッシュします
strquote = chr(34)
rsbooktypes = server.createObject(adodb.Recordset)を設定します
'本の種類を入手してください
rsbooktypes.open usp_booktypes、strconn
strlist = <select name =&strquote&lstbooktype&strquote&>
rsbooktypes.eofではありません
strlist = strlist&<option>&rsbooktypes(type)&</option>
rsbooktypes.movenext
ウェンド
strlist = strlist&</select>
rsbooktypes.close
rsbooktypes = Nothingを設定します
'リストを確認してください
Application(BookTypes)= Strlist
ifを終了します
booktypes = strlist
エンド関数
%>
このコードは、レコードセットを開くだけでなく、アプリケーション変数BookTypeの値が空であるかどうかを確認します。空でない場合、変数の内容が使用されます。空の場合、レコードセットは以前のように開かれます。明らかに、最初の人がこのルーチンを実行すると、データはキャッシュされるため、これは頻繁に変更されないデータにのみ役立ちます。
ユーザーベースでデータをキャッシュする場合は、セッションスコープで変数を使用できますが、セッションには有効期限があることに注意する必要があります。有効期限が切れた後、セッションレイヤー変数はセッションと一緒にキャンセルされ、コードは実行を終了する場合があります。
Webアプリケーションストレス(WES)ツールを使用して、テーブル9-4の分析結果が得られました。
表9-4で得られた分析結果は、ツールでした
方法
ページクリック
キャッシュはありません
190
キャッシュを持っています
11000
パフォーマンスが向上したことは明らかです。ただし、上記の方法を使用してすべてをキャッシュしないでください。結局のところ、このアプローチは、表示用にフォーマットされたデータにのみ適用できます。さらに、Webサーバーが特定の人のみにサービスを提供する場合、典型的なWebサーバーの使用法ではないことを考慮してください。使用すると、単一のサーバーで複数のユーザーをシミュレートできるため、アプリケーションをより現実的にテストできます。
特定の数のユーザーをシミュレートすることにより、WebアプリケーションストレスツールはWebページの耐性をテストできます。このツールには、非常に使いやすいシンプルなグラフィカルインターフェイスがあります。詳細については、http://homer.rte.microsoft.com/から入手するか、ツールをダウンロードしてください。
オブジェクトをキャッシュします
フォーマットされていないデータをキャッシュしたい場合はどうすればよいですか?さまざまな場所でさまざまな方法で使用できますか?もちろん、アプリケーションまたはセッション変数でこれを行うこともできます。本のタイトルを考えてみましょう。このタイトルを複数のページで使用したり、1つのテーブルにすべてのタイトルを表示したり、ユーザーを選択できるようにリストボックスに表示したりすることをお勧めします。タグでHTMLテキストをキャッシュすることなく、レコードセット自体をキャッシュすることを考える場合があります。
オブジェクトはアプリケーションまたはセッション変数でキャッシュできますが、次のように注意する必要がある2つの主な問題があります。
・アプリケーション変数に保存されているオブジェクトは、無料のスレッドをサポートする必要があるため、フリースレッドオブジェクトまたはデュアルスレッドオブジェクトである必要があります。これは、VBによって作成されたコンポーネントをアプリケーション変数でキャッシュできないことを意味します。
・セッション状態にユニットスレッドオブジェクトを保存することは、オブジェクトを作成したスレッドがアクセスを可能にする唯一のスレッドであることを意味します。したがって、IISは、このオブジェクトにアクセスしようとするページが元のスレッドがページにサービスを提供するのを待つ必要があるため、スレッド管理を完了することはできません。これにより、アプリケーションが延長される可能性があります。
スレッド化の問題についての議論については、第15章を参照してください。
デフォルトでは、ADOは、主に一部のOLE DBプロバイダーがスレッドセーフではないため、ユニットスレッドオブジェクトとしてロードされます。 ADOインストールディレクトリには、ADOを2つのスレッドモデルに変換するレジストリファイルがあり、ADOオブジェクトをアプリケーションおよびセッションオブジェクトに安全に保存できるようにします。
すべての問題が解決され、さまざまな種類のオブジェクトを使用することで大幅な速度の増加を達成できると思うかもしれませんが、必ずしもそうではありません。データベースに接続することは比較的高価な操作であるため、接続オブジェクトのキャッシュが再び接続するときに多くの時間を節約できることを多くの人が認識しています。これは事実ですが、接続オブジェクトをキャッシュすることは、接続が閉じられないことを意味するため、接続キャッシュプールは比較的非効率的です。キャッシュプールに接続するアイデアの1つは、実際にサーバーで使用されるリソースを削減することであり、ASP状態のオブジェクトをキャッシュすることは明らかにリソースの使用を減らすことはできません。実際、各オブジェクトキャッシュがサーバーのリソースを取り上げるため、それらは増加します。これにより、ビジーサイトのWebサーバーの効率が大幅に低下します。
したがって、接続オブジェクトは保存すべきではありませんが、レコードセットオブジェクト、特に切断されたレコードセットについてはどうでしょうか? ADOがユニットスレッドからデュアルスレッドに変更されたと仮定すると、自分が何をしているのかを正確に知っている限り、これを行わない理由はありません。これがASPページのパフォーマンスを自動的に改善するとは思わないでください。セットされた各キャッシュレコードセットは、メモリとASP管理の観点からサーバーのリソースを占有するため、大規模なレコードセットをキャッシュしないでください。
共有:ASP読み取りおよび書き込み登録表例:以下は参照コンテンツです。