7
votes

Lire l'élément httpruntime.cache en lecture seule

J'utilise un httpruntime.cache pour stocker une liste d'objets qui accéderont fréquemment à travers les sessions.

J'utilise la ligne de code suivante pour obtenir l'élément du cache: xxx

mais, malheureusement quand je mettant à jour le _chartData , il Mise à jour également l'élément mis en cache.

Comment puis-je simplement obtenir une copie de l'élément mis en cache?


0 commentaires

3 Réponses :


1
votes

Utilisation: xxx

Il copiera tous les éléments de _chartData à Liste .


2 commentaires

Notez que ce sera une copie profonde de l'objet afin que vous puissiez vous assurer que le cache et cette copie restent à synchroniser autrement ... Ooooops!


Peut-être une petite explication sur laquelle sa copie met également à jour la version du cache. Va obtenir mon up vote = p



1
votes

Liste est un type de référence et _chartData contient l'adresse de l'objet d'origine stocké dans le cache. C'est pourquoi lorsque vous mettez à jour _chartData, il met à jour l'objet mis en cache. Si vous voulez un objet séparé, clonez l'objet mis en cache. Voir la référence ci-dessous

http: // www.codeproject.com/articles/33364/asp-net-runtime-cache-clone-Objects-a-preserve-ca

http: // www.codeproject.com/articles/45168/asp-net-runtime-cache-clone-Objects-a-preserve-ca


0 commentaires

6
votes

C'est la façon dont .NET fonctionne parce que le cache juste référence au pointeur em> de la liste code>. Je ne sais pas si vous graphtdata_type code> est le type de valeur ou le type de référence.

Si Type de valeur, il est facile à utiliser: P>

var cloneChartData = _chartData.Select(d => 
                                       CloneHelper.DeepClone<chartData_Type>(d))
                        .ToList();


1 commentaires

Je me demande si appfabric ou NCache résoudrait ce problème. J'ai demandé à cela dans un autre fil: Stackoverflow.com/Questtions/23546817/...