C# 保持缓存中的对象不变

C# 保持缓存中的对象不变,c#,asp.net,xml,caching,C#,Asp.net,Xml,Caching,该代码“完美”地工作。创建XDocument,将其放入缓存,并在下一轮检索它 但我希望缓存中的对象不受标记位置后所做更改的影响,我在标记位置添加了一些仅在此会话中有效的元素 缓存中的对象与页面上的所有用户相关,因此应该在缓存生存期内只生成/更改一次 我可以从缓存中克隆它,或者将它存储为一个字符串(不是引用类型),然后丢失到新的XDocument中,但最温和的方法是什么呢?当我可以按原样缓存XDocument时,似乎有点过头了 提前感谢, 斯汀 { string cachekey=“categor

该代码“完美”地工作。创建XDocument,将其放入缓存,并在下一轮检索它

但我希望缓存中的对象不受标记位置后所做更改的影响,我在标记位置添加了一些仅在此会话中有效的元素

缓存中的对象与页面上的所有用户相关,因此应该在缓存生存期内只生成/更改一次

我可以从缓存中克隆它,或者将它存储为一个字符串(不是引用类型),然后丢失到新的XDocument中,但最温和的方法是什么呢?当我可以按原样缓存XDocument时,似乎有点过头了

提前感谢,

斯汀

{
string cachekey=“categories”;
var cateGoryDoc=HttpRuntime.Cache.Get(cachekey)作为XDocument;
如果(cateGoryDoc==null)
{
XDocument doc=XDocument.Parse(this.ProductList1.getXML());
数不清的猫=
从文档子体(“产品”)中的类别1。子体(“类别”)选择类别1;
var cDoc=新XDocument(新XDeclaration(“1.0”、“utf-8”、null)、新XElement(“根”);
cDoc.Root.Add(mainCats);
cateGoryDoc=cDoc;
HttpRuntime.Cache.Insert(cachekey,cDoc,null,
DateTime.Now.AddMinutes(10),
时间跨度(0);
}
//我不想更改缓存中的文档!!
if(HttpContext.Current.Request[“tCats”]!=null)
{
字符串[]tCats=HttpContext.Current.Request[“tCats”].Split(Convert.ToChar(“,”);
foreach(tCat中的字符串tCat)
{
cateGoryDoc.Root.Add(新的XElement(“selectedCategory”,tCat));
}
}
this.catecoryXML.DocumentContent=cateGoryDoc.ToString();
this.catecoryXML.TransformSource=“/XSLTFile1.xslt”;
}

创建新的XDocument。将从缓存中检索的内容复制到您创建的内容。

创建新的XDocument。将从缓存中检索到的内容复制到您创建的内容。

克隆是一种方法

您可以按如下方式执行此操作:

XDocument cachedDocument = ... get it from the cache ...
XDocument clone = new XDocument(cachedDocument);
... modify the clone

克隆是一条路要走

您可以按如下方式执行此操作:

XDocument cachedDocument = ... get it from the cache ...
XDocument clone = new XDocument(cachedDocument);
... modify the clone

是的,这将是。。。。。但我认为可能有一种方法可以避免初始化新对象,避免对性能产生任何影响。。。。。但它很容易做到,就像你写的那样-它将是。。。。。但我认为可能有一种方法可以避免初始化新对象,避免对性能产生任何影响。。。。。但这很容易做到,就像你写的一样