我有一个Winform应用程序,我正在尝试实现缓存,以便在每次调用我的类方法时加快读取数据的过程。我正在考虑使用类似Singleton的方法。我在考虑这样的事情:
public class MyCache {
private MyDataClass _cacheData;
private static MyCache _cache;
public static MyCache CreateCache()
{
return _cache ?? new MyCache();
}
public void CacheData(MyDataClass data)
{
_cache = data;
}
public MyDataClass GetCache()
{
return _cache;
}
}
有人可以告诉我这种方法是否合适,或者我应该使用更好的方法吗?
答案 0 :(得分:1)
根据您的情况,我建议使用表单级缓存,即具有相应属性的共享/静态列表。按列表我的意思是任何类型的对象,但很可能它是一个字典 - 拥有(key,value)
对。在每个属性中,如果Nothing
从数据库填充,则从_variable
读取,因此它只会加载一次。像这样:
Dictionary<string, string> _VendorData;
public object VendorData
{
get
{
if (_VendorData == null)
_VendorData = GetVendorDictionary();
return _VendorData;
}
}
public Dictionary<string, string> GetVendorDictionary()
{
//get vendor data from database and populate a dictionary
}
如果您计划在缓存中包含更多对象,则可以考虑创建Dictionary
<YourObjectTypesEnum, Dictionary<String, String>>
,而YourObjectTypesEnum
可以是Vendor
,{{1 }},Manufacturing
等等。因此,您必须严格键入代码,而不是通过Location
进行访问。然后,如果缺少,您将测试String
而不是空检查和ContainsKey
到字典。
如果您以后决定在其他表单上使用此缓存,则可以轻松地将其移动到单独的类,因为无论如何所有方法和属性都是静态的。