c#ASP - 每次都不重新添加内容而调用字典

时间:2012-03-27 12:36:56

标签: c# asp.net .net asp.net-mvc

我有一个包含数据集字典的网站。当用户更改页面,并通过其键调用字典时,我总是必须将所有数据集重新添加到字典中。这似乎有点多余。还有更好的方法吗?

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",".......");

2 个答案:

答案 0 :(得分: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

或者......如果该数据集对于每个用户来说是唯一的,那么对于缓存来说可能太多了,所以只需添加到会话变量中。有很多方法可以做到这一点。

答案 1 :(得分:1)

这就是导致它的原因:

ClassA da = new ClassA();

如果每次都实例化一个全新的对象,那么你每次都必须重新填充该对象。

您从哪里获取用于填充对象的数据?这些数据会改变吗?

如果数据是静态的,那么快速简单的尝试就是将字段设为静态:

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

然后你只需设置一次它就会保留这些数据。请注意,设置略有不同。你不会调用类的实例,你自己调用类类型:

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

这可能是一项重大的设计变更,具体取决于如何获取/使用此数据/等。因此,在这个问题的背景下我们看不到可能存在的缺点。

另一种选择是保持原样,但重新将数据填充到对象的构造函数中:

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

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

这向外保留了类的结构,只是将数据的填充移动到代码中的单个位置。但请注意,数据 仍在使用该类的每个新实例重新填充。因此,如果首先获取数据是一个繁重的过程,并且不应该发生多次,那么您可能不想采用这种方法。

你有任何方式看它有利有弊。其中很多都与这个问题背景之外的因素有关。

(旁注:请注意,我在此代码中更改了您的类的大小写,以大写字母开头。这是C#中的惯用标准。请注意,此页面上的代码语法高亮显示不会突出显示您的类名作为类名.C#的标准是期望类被大写。)