2013-10-08 3 views
0

Привет, я хочу, чтобы код ниже работал более эффективно, используя кеширование в .net. Как получить содержимое в словаре, кэшированном, так что, когда buttSubmit_Click() называется словарем, его не нужно переопределять, а вместо этого используются кэшированные данные..net словарь cache 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 действительно, downvotes запутывают. Я согласен с ответом (но пример сделает его намного более удобным) –

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 имеет преимущество (dis), которое оно сохраняется для всех пользователей и запросов - в других решениях словарь создается для каждого запроса заново. Сначала вы должны создать global.asax в вашем веб-проекта (если не aleady на месте):

enter image description here Global Asax 2

Затем вы должны отредактировать файл Global.asax.cs и добавить Dict :

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"}, 
     }; 

} 

Если вы хотите получить доступ к этой Dict простой вызов 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

Смежные вопросы