0

クラスメソッドの1つが呼び出されるたびにデータを読み取るプロセスを高速化するために、キャッシュを実装しようとしているWinformアプリケーションがあります。シングルトンのようなアプローチを使用することを考えています。私はこのようなことを考えています:

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)ペアを持っています。各プロパティ内で、の場合Nothing、データベースからデータを入力し、から読み取りを_variable行うため、ロードは1回だけになります。このようなもの:

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>>、でアクセスするのではなく、コードを厳密に入力する必要があります。次に、nullチェックの代わりにテストし、欠落している場合は辞書を作成します。YourObjectTypesEnumVendorManufacturingLocationStringContainsKey.Add

後で他のフォームでこのキャッシュを使用することにした場合は、すべてのメソッドとプロパティが静的であるため、別のクラスに簡単に移動できます。

于 2012-11-08T02:21:17.343 に答える