2011-02-24 5 views
1

私は、複数のファイルとデータベースからデータを読み込むグラフィカルツールをSilverlightで作成しています。Silverlightですべてのユーザーが使用するデータをキャッシュできますか?

データベースを何度も何度も呼びたいとは思わない。私は必要なときにデータを取得し、どこかで安全にしたいので、ユーザーや他のユーザーが同じページにアクセスした場合、データにアクセスすることができます。

私はasp.netキャッシュ["オブジェクト"]のアプリケーション状態を使用しますが、Silverlightでは使用しますか?最高の方法論は何ですか?

答えて

4

silverlightはクライアント側で実行されているため、サーバー側をキャッシュする必要があります。 WCFを使用してデータを取得できます。これらの線に沿って 何か:

public class YourWcfService 
{ 
    ICacheManager _cacheManager = null; 

    public YourWcfService() 
    { 
     _cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>("Cache Manager"); 
    } 

}

ウェブ法のようなものになります:

私が過去にやっていることはenterprise libraryを使用してWCFを使用してクエリをキャッシュすることです

[OperationContract] 
    public List<Guid> SomeWebMethod() 
    { 
     if (_cacheManager.Contains("rgal")) // data in cache? 
       result = (List<Guid>)_cacheManager.GetData("rgal"); 
      if (result == null) 
      { 

       result = FETCH FROM DATABASE HERE; 
       // cache for 120 minutes 
       _cacheManager.Add("rgal", result, CacheItemPriority.Normal, null, new AbsoluteTime(TimeSpan.FromMinutes(120))); 
      } 
        return result; 
    } 
1

Silverlightコントロールはユーザーごとにブラウザ/クライアント側で実行されるため、サーバー上のすべてのユーザーに何かをキャッシュすることはできません。

与えられたユーザーのセッションまたは独立したストレージのコントロールのデータを特定のユーザーにキャッシュできます。しかし、対応するサーバーサイドコードを記述しなければ、サーバー上で何もできません。

0

キャッシングは本当に必要ですか?あなたは本当にあなたのデータベースを悪くしていますか?

あなたのデータベースはあなたのストレージです。パフォーマンスの問題がない限り、これは早すぎる最適化です。

0

新しいエンタープライズライブラリSilverlight Integration Packは、クライアントでのキャッシュ機能を提供します。 2種類のデータキャッシングがサポートされています。メモリ内と独立したストレージです。また、(プログラマチックに、または外部設定を介して)有効期限ポリシーの設定の柔軟性と設定ツールのサポートを得ることができます。

注:これはコードプレビュー版ですが、5月に最終版としてリリースされるはずです。

関連する問題