0

データ サイズに基づいて、大まかに 2 つの異なるクラスのデータ キャッシュ要件があります。このシステムは、親子エンティティ階層の概念に基づいており、アクションはエンティティ タイプ コードと組み合わせて構築された値に対して承認されます。異なるエンティティのこれらの型コードをキャッシュすると、db fetch の時間が節約されます。2) 中/大データ – これは、製品の説明やページなどの一般的なデータです。

どちらのアプローチがファーストクラスのデータに適しているかについて、私は混乱しています。次のようにキャッシュできます。

HttpRuntime.Cache.Insert("typeCode" + entityId, entityTypeCode);

またはこのように:

Dictionary<int, string> etCodes = 
    (Dictionary<int, string>)HttpRuntime.Cache["typeCode"];
etCodes[entityId] = entityTypeCode;

明らかに、2 番目のアプローチでは、entityId ごとに不要なキャッシュ項目を節約しています。または、このような小さなサイズのアイテムをいくつか含む Cache オブジェクトを使用してもかまいません。

これらのアプローチのうち、パフォーマンスとオーバーヘッドの点で優れているのはどれですか?

4

1 に答える 1

0

個人的には、単一のオブジェクトの 2 番目のアプローチを採用し、の代わりにカスタム オブジェクトを使用しますDictionary

これにより、後でオブジェクト内のアイテムの有効期限や実装の変更など、より多くの側面を制御できるようになります。

私はこれと同じようにします:

public class MyCacheObject
{
    public static MyCacheObject 
    {
        get
        {   
            // ...Omitted locking here for simplification...

            var o = HttpRuntime.Cache["MyCacheObject] as MyCacheObject;
            if ( o = null )
            {
                o = new MyCacheObject();
                HttpRuntime.Cache["MyCacheObject] = o;
            }
            return o;
        }
    }

    public object GetEntity( string id, string code )
    {
        // ...
    }

    public void SetEntity( object entity, string id, string code )
    {
        // ...
    }

    // ...
}

エンティティのカスタム基本クラスがある場合は、メソッドGetEntitySetEntityメソッドをさらに最適化できます。

于 2011-05-28T18:57:06.927 に答える