2012-03-27 9 views
1

私はデータセットの辞書を保持するウェブサイトを持っています。ユーザーがページを変更し、そのキーを使用して辞書を呼び出すと、常にすべてのデータセットを辞書に追加する必要があります。それは冗長なようです。より良い方法がありますか?c#ASP - 毎回内容を追加せずに辞書を呼び出す

クラスA

public IDictionary<string, DataSet> DataDic { get; private set; } 

ClassBの

classA da = new classA(); 
da.DataDic.Add("Key1","......."); 
da.DataDic.Add("Key2","......."); 
da.DataDic.Add("Key3","......."); 
+0

現在使用しているコードを表示できますか?おそらくもっと良い方法がありますが、まずは_current_を知る必要があります。 – David

+0

サンプルコード – tdjfdjdj

+0

で更新されましたあなたのタグ付けは私にとって間違っています。 asp classicはpre-.netです。 – CodesInChaos

答えて

1

これは、それを引き起こしているものです:あなたは完全に新しいオブジェクトを毎回インスタンス化した場合

ClassA da = new ClassA(); 

は、もちろん、あなたは毎回オブジェクト移入を再する必要があるとしています。

オブジェクトにデータを入力するために使用するデータはどこにありますか?そのデータは変更されますか?

データが静的である場合は、試すために迅速かつ簡単な事は、フィールドを静的にすることです:

public static IDictionary<string, DataSet> DataDic { get; set; } 

次に、あなたは一度だけ、それを設定し、それがそのデータを保持します。設定は少し異なります。あなたはクラス型そのものを呼びたい、クラスのインスタンスを呼び出すことはありません。

ClassA.DataDic = new Dictionary<string, DataSet>(); 
ClassA.DataDic.Add("Key1","......."); 
// ... 

これは、このデータは/ etc /使用フェッチする方法に応じて、大幅な設計変更することがあります。したがって、この質問の文脈の中で私たちが見ていないような不利な点があるかもしれません。

別のオプションはそれにそれがある方法を維持することですが、再要因は、オブジェクトのコンストラクタへのデータの移入:これは外側にクラスの構造を保持

public class ClassA 
{ 
    public IDictionary<string, DataSet> DataDic { get; private set; } 

    public ClassA() 
    { 
     DataDic = new Dictionary<string, DataSet>(); 
     DataDic.Add("Key1","......."); 
     // ... 
    } 
} 

は、ただの移入を移動しますデータをコード内の単一の場所に保存します。ただし、データは、まだクラスの新しいインスタンスごとにが再入力されています。したがって、とすると、最初のデータは重いプロセスであり、複数回は起こらないようにしてください。このアプローチでは行きたくないかもしれません。

あなたがそれを見る方法は長所と短所があります。そして、その多くは、この質問の文脈外の要因と関係しています。

(このコードでは大文字で始まる大文字の大文字を変更していますが、これはC#の慣用的な標準です。このページのハイライト表示のコードでは、 C#の標準は、クラスを大文字にすることを期待することです。)

1

使用ASP.NETのキャッシュ。そのデータセットをリロードするのではなく、キャッシュキーが存在するかどうかを確認してください。それがない場合は、そのデータセットがそうそしてちょうど追加し、キャッシュのためにあまりにも多くの可能性があることを、ユーザーごとに一意である場合、データソース

Cache.Insert("key", myFrequentlyAccessedData, null, 
    System.Web.Caching.Cache.NoAbsoluteExpiration, 
    TimeSpan.FromMinutes(10)); 

http://msdn.microsoft.com/en-us/library/aa478965.aspx

それとも...からそれを再ロードセッション変数に追加します。これを行う方法はたくさんあります。

関連する問題