I am using a HttpRuntime.Cache
to store a list of objects that will be accessing frequently across sessions.
I use the following line of code to get the item from the cache:
List<chartData_Type> _chartData =
(List<chartData_Type>)HttpRuntime.Cache.Get("rollingMonth");
But, unfortunately when I update the _chartData, it updates the cached item too.
How can I simply get a copy of the cached item?
List is a reference type and _chartData holds the address of the original object stored in the cache. That is why when you update _chartData, it updates the cached object too. If you want a separate object then clone the cached object. See below reference
http://www.codeproject.com/Articles/33364/ASP-NET-Runtime-Cache-Clone-Objects-to-Preserve-Ca
http://www.codeproject.com/Articles/45168/ASP-NET-Runtime-Cache-Clone-Objects-to-Preserve-Ca
Use:
It will copy all items from
_chartData
tolist
.That is the way which .NET works because Cache just reference to the pointer of
List
. Don't know whether youchartData_Type
is value type or reference type.If value type, it is easy to use:
But if reference type, it comes to complicated, you need to implement DeepCopy method for your class, then do
DeepCopy
for each object in list.DeepClone
method:In order to use this method, class
chartData_Type
must be marked[Serializable]
:So, you can do deep clone manually: