0

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

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

4

1 回答 1

1

对于您的情况,我建议使用表单级缓存,即具有相应属性的共享/静态列表。列表是指任何类型的对象,但很可能是字典——有一(key,value)对。在每个属性中, ifNothing从数据库中填充,然后从 中读取_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
}

如果您计划在缓存中包含更多对象,您可能会考虑创建一个Dictionaryof<YourObjectTypesEnum, Dictionary<String, String>>来代替, where YourObjectTypesEnumcan be Vendor,ManufacturingLocation。因此您可以在代码中严格输入,而不是访问 by String。然后,您将进行测试ContainsKey而不是空检查,.Add如果丢失则使用字典。

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

于 2012-11-08T02:21:17.343 回答