クローン化されたキャッシュされたアイテムは、メモリの問題を持っています
-
23-09-2019 - |
質問
私たちは、キャッシュ・エンタープライズライブラリキャッシュブロックに格納された値を持っています。一覧でキャッシュされたアイテムのアクセサは、値を変更します。 私たちは、キャッシュされたアイテムが影響を受け取得したいdidntの。
そこでまず我々は、新しいリスト(CachedItemののIEnumeratorを)返さ これは、アイテムの追加と削除アクセサは、元のキャッシュされた項目にほとんど影響を及ぼさなかったことを確認しました。
しかし、私たちが発見、我々はアクセサに戻ったリストのすべてのインスタンスは生存していました!オブジェクトリレーショナルグラフは、このリストとEnterpriseLibrary.CacheItemとの関係を示しました。
だから我々は、新規にクローニングされたリストであることをリターンを変更しました。このために我々はLINQを使用しました いう (データの項目から新規のDataClass(項目)を選択).ToList() あなたは上記のように行う場合でも、ORGは、このリストとCacheItemの関係があることを示しています。
カントは、我々は、エンタープライズライブラリキャッシュに存在するリスト項目のクローンを作成するために何かをdoesntのは、CACHEとの一切の関係を持っている?!
正しい解決策はありません
他のヒント
あなたはすなわち、リスト内の各オブジェクトの複製(およびクローン彼らは含まれていてもよいことを任意のオブジェクトを追加し、私はあなたのためにこれを行うには、クローン()メソッドを持つことをお勧めし、リストの深いクローンを作成する必要があります)、新しいリストへ。参照は関係なく、あなたがそれをコピー何回参照されていない、上にコメントしました。
このキャッシュのそれらを抜くときに我々はアイテムのクローンを作成する方法です。オブジェクトが直列化可能とマークする必要があります。
using (MemoryStream buffer = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(buffer, objectToClone);
buffer.Position = 0;
object temp = formatter.Deserialize(buffer);
return temp;
}