2013-10-08 131 views
0

嗨我想使下面的代碼更有效地使用.net中的緩存運行。如何獲取緩存字典中的內容,以便在調用buttSubmit_Click()時不必重新定義字典並使用緩存數據。.net詞典緩存c#

protected void buttSubmit_Click(object sender, EventArgs e) 
{ 
    Dictionary<string, string> dict = new Dictionary<string, string>(); 
    dict.Add("rad1", "value1"); 
    dict.Add("rad2", "value2"); 
    dict.Add("rad3", "value3"); 
    dict.Add("rad4", "value4"); 

    string vValue; 
    dict.TryGetValue(RadioButtonList.SelectedValue, out vValue); 
    submitVote(vValue); 
} 
+2

的WinForms? ASP.NET? – CodeCaster

+2

@CodeCaster這不會真的改變任何東西...... –

+0

@Marc會不會無狀態的ASP.NET要求有狀態的WinForms形式稍有不同的方法? – CodeCaster

回答

2

坦白地說,如果它就是這麼簡單,我會誘惑使用switch,但 - 假設是一種簡化,可能使其成爲一個場(在這種情況下,我做了它static,但是由你):

private static readonly Dictionary<string, string> dict 
     = new Dictionary<string, string> { 
    {"rad1", "value1"}, 
    {"rad2", "value2"}, 
    {"rad3", "value3"}, 
    {"rad4", "value4"}, 
}; 

protected void buttSubmit_Click(object sender, EventArgs e) 
{ 
    string value; 
    if(dict.TryGetValue(RadioButtonList.SelectedValue, out value)) 
    { 
     submitVote(value); 
    } 
} 
+0

我想我會與此一起去。但我仍然想知道如何緩存。似乎在.net中有很多不同的緩存方式,但我不能選擇一個來使用。謝謝大家。 – bStaq

2

聲明並填充方法外的字典作爲字段。

好的,我會擴大;爲靜態字段顯示在對方的回答,這裏是實例字段:

protected Dictionary<string, string> dict = new Dictionary<string, string>(); 

public MyClass() 
{ 
    dict.Add("rad1", "value1"); 
    dict.Add("rad2", "value2"); 
    dict.Add("rad3", "value3"); 
    dict.Add("rad4", "value4"); 
} 

protected void buttSubmit_Click(object sender, EventArgs e) 
{  
    string vValue; 
    dict.TryGetValue(RadioButtonList.SelectedValue, out vValue); 
    submitVote(vValue); 
} 

選擇取決於使用情況。如果兩者都不好,請考慮if/else塊。

+0

由於簡短的回答是downvote? –

+2

嚴重.. downvoters ..你能解釋這個用戶有什麼問題,以便他們可以修復他們的答案嗎? –

+0

@SimonWhitehead事實上,降價是令人困惑的。我同意答案(但是一個例子會使它更易於使用) –

0

要緩存不斷值只是避免不必要的初始化,是這樣的:

Dictionary<string, string> dict = null; 
protected void buttSubmit_Click(object sender, EventArgs e) 
{ 
    if(dict == null) 
    { 
     dict = new Dictionary<string, string>(); 
     dict.Add("rad1", "value1"); 
     dict.Add("rad2", "value2"); 
     dict.Add("rad3", "value3"); 
     dict.Add("rad4", "value4"); 
    } 

    string vValue; 
    dict.TryGetValue(RadioButtonList.SelectedValue, out vValue); 
    submitVote(vValue); 
} 

要緩存動態數據,則必須另外提供一個條件,以便在數據發生更改並且必須重新緩存時,將其重置爲重置緩存(使其再次爲null)。

+1

你在這裏使用'constant'和'dynamic'並不在「代碼關鍵字」的意義上 - 如果你強調它們,它會更容易混淆,即* constant *和* dynamic * –

0

將global.asax添加到您的項目中並將此Dictionary添加爲全局靜態也是一種解決方案。 global.asax的解決方案具有對所有用戶和請求持久的(dis)優勢 - 在其他解決方案中,Dictionary是爲每個新請求創建的。 首先,你必須在你的web項目中創建一個Global.asax(如果不是已位於到位):

enter image description here Global Asax 2

然後,你必須編輯您的Global.asax.cs文件並添加您的字典:

public class Global : System.Web.HttpApplication 
{ 

    public static readonly Dictionary<string, string> TEST_DICT 
       = new Dictionary<string, string> { 
      {"rad1", "value1"}, 
      {"rad2", "value2"}, 
      {"rad3", "value3"}, 
      {"rad4", "value4"}, 
     }; 

} 

如果你想訪問該字典簡單的調用Global.TEST_DICT:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Label_TESTDICT.Text = ""; 
     List<String> keys = Global.TEST_DICT.Keys.ToList(); 
     foreach (String key in keys) 
     { 
      Label_TESTDICT.Text += key + ":" + Global.TEST_DICT[key] + "<br>"; 
     } 
    } 
} 
+0

我也會嘗試這種方法。謝謝 – bStaq