2

パフォーマンスが低いため、少し最適化する必要があるレガシーWebサイトがあります。これは、データ層としてlinq to sqlを使用し、UIパターンとしてMVPパターンを使用するasp.netショッピングWebサイトです。

データベースで最もコストのかかるエンティティは、1対多の関係を持つ製品テーブルとカテゴリテーブルです。管理者グループのユーザーが製品またはカテゴリを追加することを決定しない限り、これら2つのエンティティは定期的に変更されない可能性があります。だから、もし私が自分のデータを生かしておく方法があったら…</ p>

最初は、データの取得にAJAXを使用して、クエリまたはバインドする必要のあるエンティティのみを作成することを考えましたが、新しいDataContextインスタンスを作成せずにそれを行うにはどうすればよいですか?!! 一方、DataContext全体にキャッシュを使用することは、メモリコストのために悪い決定と見なされます。では、ここで最良のオプションは何でしょうか?どうすれば改善できますか?

アップデート

1)@HatSoftが提案したことを実行します。

短所:これらのアプローチはコードには役立たず、データベースのみに役立ちます。これに加えて、レンダリングされたhtmlではなくデータをメモリに配置しているため、メモリの問題が発生する可能性がありますが、これはデカップリングに関する最良のオプションである可能性があります。

2)出力キャッシュを使用すると、*。aspxワイルドカードを使用してhttpハンドラーに次のコードがあります。

string pagePath = Context.Request.Url.AbsolutePath;
object cacheKey = application[pagePath];
if(cacheKey == null)
  return; //application restarted/first run so cache the stuff
else
  Context.Response.RemoveOutputCacheItem(pagePath);

短所:ここで、pagePathをページが使用する各データベースエンティティにリンクする必要がありますが、そうすると、それらを分離するのではなく、結合します。このアプローチでも、少しハードコーディングが必要になります。

3)別の解決策は、制御キャッシュモードではなくポストキャッシュモードでの出力キャッシュです。Subsituation要素を使用し、OutPutCacheの期間を86400に設定して、ページが24時間ごとに再作成されるようにします。

短所: Subsituation要素のhtml出力を動的に生成するためのユーザーコントロールのハードコーディング。

それで、あなたは何を提案しますか?

4

2 に答える 2

1

SqlDependency クラスを調べることをお勧めします この記事http://www.asp.net/web-forms/tutorials/data-access/caching-data/using-sql-cache-dependencies-csを読んでください

また、アプリケーションに適している場合は、アプリケーションの起動時にキャッシュにデータをロードすることを検討することをお勧めします。ここで良い例を参照してください http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

于 2012-08-05T17:15:56.780 に答える
0

Linq2SQL では、 LINQ クエリに強力なキャッシュを提供するLinqToCacheを使用できます。最初のアクセス (基になる の最初の反復) の後で、 をフォーム メモリSqlDependencyに変換しIQueryable<Products>て列挙します。データ変更通知に基づいてリストを無効にし、その後のアクセスで DB から再度クエリを実行し、結果をキャッシュします。IEnumerable<Products>IQueryableSqlDependency

製品リストとカテゴリはメモリにキャッシュすることをお勧めします。これらはめったに変更されず、かなり制限されたサイズになると予想されるためです。

于 2012-08-06T13:41:24.990 に答える