0

ASP.NET の仕組みに関連する質問があり、説明するために最善を尽くします。

アプリに 4 層アーキテクチャがあります

  1. Web (ASP.NET Web アプリケーション)
  2. ビジネス (クラス ライブラリ)
  3. 汎用 CRUD 層 ** (クラス ライブラリ)
  4. データ (クラス ライブラリ)

私のこの一般的な CRUD レイヤーは、リフレクションを使用してオブジェクトのプロパティを設定および読み取りますが、PropertyInfo を使用するとかなりコストがかかるため、これらのアイテムをキャッシュする必要があることを読みました。

シナリオは次のとおりです。

Fred と Jim の 2 人がサイトにアクセスします。Fred は Customer を作成し、それが Generic CRUD レイヤーを呼び出して、Customer クラスのプロパティ情報を System.RuntimeCache 内にキャッシュします。Jim は数秒後に Customer も作成します。

私の質問は、Fred と Jim の両方からの 2 つの要求によって、プロパティ情報の取得が 2 回トリガーされることになりますか? それとも、ASP.NET は 2 回目にキャッシュから取得しますか? つまり、Jim の要求は、プロパティ情報がキャッシュ経由で取得されるため、より高速になりますか?

私の考えでは、私の CRUD はクラス ライブラリであり、System.Web.Cache にアクセスできないため、プロパティ情報はすべてのセッション/ユーザー間でキャッシュされませんか?

4

2 に答える 2

1

いいえ、リクエストごとに新しいクエリを発行します (別の方法でコーディングしていない限り)。

ASP.Net アプリケーション (ブラウザー、プロキシ、サーバー側の応答キャッシュ、中間オブジェクトのキャッシュ、DA 層のキャッシュ) で発生する可能性がある複数のキャッシュ レイヤーがあり、すべてを構成/使用できます。ただし、特にコード/ルール/構成を作成しない限り、ASP.Net (または任意のアプリケーション) には何もキャッシュされません。

于 2012-10-24T16:10:53.513 に答える
0

Alexei Levenkov が指摘しているように、キャッシュが明示的に発生するように構成する必要があります。特定のプロパティ値の自動キャッシュを取得するつもりはありません。

ただし、PropertyInfo を使用すると、コードを記述してプロパティに直接アクセスする場合に比べてコストがかかりますが、データベースのラウンドトリップのコストや、サーバーとエンド ユーザー間の待機時間と比較すると見劣りします。Entity Framework、WebForms、MVC などのツールはすべて、リフレクションを広範囲に使用します。これは、リフレクションによって発生するパフォーマンス コストが、メンテナンス コストの削減に見合うだけの価値があるためです。

時期尚早の最適化は避けてください。

于 2012-10-24T16:17:59.800 に答える