0

嗨,我想使用 .net 中的缓存使下面的代码更有效地运行。如何获取缓存中的字典内容,以便在buttSubmit_Click()调用字典时不必重新定义字典,而是使用缓存的数据。

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);
}
4

4 回答 4

3

好吧,坦率地说,如果它这么简单,我会很想使用 a 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);
    }
}
于 2013-10-08T10:15:48.620 回答
2

将方法外的 Dictionary 声明并填充为字段。

好的,我会展开;由于静态字段显示在另一个答案中,因此这里是实例字段:

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 块。

于 2013-10-08T10:13:17.957 回答
0

将 global.asax 添加到您的项目并将您的 Dictionary 添加到此作为全局静态也是一种解决方案。这个带有 global.asax 的解决方案的(缺点)优点是它对所有用户和请求都是持久的——在其他解决方案中,字典是为每个请求新创建的。首先,您必须在您的 Web 项目中创建一个 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>"; 
        }
    }
}
于 2013-10-09T09:37:28.743 回答
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再次缓存),只要数据发生更改并且必须重新缓存。

于 2013-10-08T10:24:30.853 回答