1

Cache-Enterprise ライブラリ Caching Block に値を格納しています。リストであるキャッシュされたアイテムのアクセサーは、値を変更します。キャッシュされたアイテムに影響を与えたくありませんでした。

したがって、最初に新しい List(IEnumerator of the CachedItem) を返しました。これにより、アイテムを追加および削除するアクセサーが元の Cached アイテムにほとんど影響を与えないようにしました。

しかし、アクセサーに返されたリストのすべてのインスタンスが ALIVE であることがわかりました。オブジェクト リレーショナル グラフは、このリストと EnterpriseLibrary.CacheItem の間の関係を示しました。

そのため、戻り値を新しく複製されたリストに変更しました。このために、LINQ say (from item in Data select new DataClass(item) ).ToList() を使用しました。上記のようにしても、ORG はこのリストと CacheItem の間に関係があることを示しています。

エンタープライズ ライブラリ キャッシュに存在するリスト アイテムのクローンを作成するために何かできないでしょうか。これは CACHE とはまったく関係がありません。

4

2 に答える 2

1

リストのディープ クローンを作成する必要があります。つまり、リスト内の各オブジェクトのクローンを追加します (そして、それらに含まれる可能性のあるオブジェクトをすべてクローンします。これを行うには Clone() メソッドを使用することをお勧めします)。新しいリスト。上でコメントしたように、参照は何度コピーしても参照です。

于 2010-03-30T05:07:46.263 に答える
0

これは、アイテムをキャッシュから引き出すときにアイテムを複製する方法です。オブジェクトはシリアライズ可能とマークする必要があります。

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
于 2014-02-14T17:22:01.417 に答える