3

ASP.NET SQL プロファイル プロバイダーはキャッシュを使用しますか? ユーザーのプロファイルからデータを取得すると、リクエストごとに DB にヒットしますか?

これに関する設定または情報を探しています。Cookie を使用すると読んだと思っていましたが、今は見つかりません。

編集:

http://msdn.microsoft.com/en-us/library/aa478953.aspxは、プロセスを次のように説明しています

SqlProfileProvider.GetPropertyValues によって呼び出されると、aspnet_Profile_GetProperties は次のアクションを実行します。

  1. aspnet_Applications テーブルにクエリを実行して、入力されたアプリケーション名をアプリケーション ID に変換します。
  2. aspnet_Users テーブルにクエリを実行して、入力されたユーザー名をユーザー ID に変換します。
  3. 指定されたユーザーの PropertyNames、PropertyValuesString、および PropertyValuesBinary フィールドの aspnet_Profile テーブルを照会します。
  4. aspnet_Users テーブル内のユーザーの最後のアクティビティの日付を現在の日付と時刻で更新します。
4

2 に答える 2

2

MSDNから

アプリケーションが実行されると、ASP.NET は ProfileCommon クラスを作成します。これは、動的に生成され、ProfileBase クラスを継承するクラスです。動的な ProfileCommon クラスには、アプリケーション構成で指定したプロファイル プロパティ定義から作成されたプロパティが含まれます。この動的な ProfileCommon クラスのインスタンスは、現在の HttpContext の Profile プロパティの値として設定され、アプリケーション内のページで使用できます。

Profile オブジェクトがリクエストの現在の HttpContext にアタッチされているようです。そのため、新しい HttpContext を作成しない限り、最初のリクエストでプロファイル データが読み込まれ、ここに保存されます。

編集- アレンはここでいくつかの明確化のためにいくつかの良い点を挙げました - >プロファイルデータは各HttpRequestでクエリされます(たとえば、新しいHttpContextが作成されるとき)。ただし、各リクエスト内で、さまざまなプロパティのプロファイル プロバイダーへの呼び出しは、最初の呼び出しでのみ DB にアクセスし続けません。

于 2010-08-11T15:19:18.817 に答える
1

はいといいえ

プロバイダーは、プロファイル データにアクセスする要求ごとに「キャッシュ」を 1 回使用します。特定のリクエスト中にプロファイル データにアクセスしない場合、クエリは実行されません。ただし、1 回のリクエストでプロファイル データに複数回アクセスする (そして更新しない) 場合、クエリは 1 回だけです。

重要なポイントは次のとおりです。リクエストごとにプロファイル データにアクセスすると、asp.net はプロファイル データのリクエストごとに 1 回データベースにクエリを実行します。

あなたの質問に具体的に答えるには: 「ユーザーのプロファイルからデータを取得すると、 [http]リクエストごとに DB にヒットしますか?」 はい、毎回データベースにヒットします。

おそらく、なんらかの形式のセッション ベースのキャッシュを行う独自のプロバイダーを構築できるので、ユーザー プロファイル データを検索するために常にデータベースを呼び出すとは限りません。このトピックに関する優れた記事は次のとおりです。ASP.NET プロファイルのパフォーマンスの最適化

于 2012-06-13T23:59:14.523 に答える