为Winforms设计缓存模式

时间:2012-11-08 01:00:37

标签: c# winforms caching singleton

我有一个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;
    } 
}

有人可以告诉我这种方法是否合适,或者我应该使用更好的方法吗?

1 个答案:

答案 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到字典。

如果您以后决定在其他表单上使用此缓存,则可以轻松地将其移动到单独的类,因为无论如何所有方法和属性都是静态的。