我有一个包含数据集字典的网站。当用户更改页面,并通过其键调用字典时,我总是必须将所有数据集重新添加到字典中。这似乎有点多余。还有更好的方法吗?
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 :(得分: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#的标准是期望类被大写。)