2012-03-27 57 views
1

我有一個網站,其中包含數據集的字典。當用戶更改頁面時,我通過它的鍵調用字典,我總是必須重新添加所有數據集到字典中。它似乎有點多餘。有沒有更好的辦法?c#ASP - 每次不重新添加內容時調用字典

CLASSA

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 2012-03-27 12:40:25

+0

剛剛更新了示例代碼 – tdjfdjdj 2012-03-27 12:46:21

+0

您的標記看起來不對我。 asp classic是pre.net。 – CodesInChaos 2012-03-27 12:49:06

回答

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

或...重新加載,如果該數據集是每個用戶唯一的,這可能是太多的緩存,這樣的話只需添加到一個會話變量。很多方法可以做到這一點。

相關問題