这段代码“完美”地工作。创建一个 XDocument,将其放入缓存中,并在下一轮检索它。
但是我希望缓存中的对象不受标记位置之后所做的更改的影响,我在其中添加了一些仅在此会话中有效的元素。
缓存中的对象与页面上的所有用户相关,因此在缓存生命周期内只应生成/更改一次。
我可以从缓存中克隆它或将其存储为我猜想的字符串(不是引用类型)并丢失到新的 XDocument 中,但是最温和的方法是什么?似乎有点矫枉过正,当我可以按原样缓存 XDocument 时......
提前致谢,
斯蒂恩
{
string cachekey = "categories";
var cateGoryDoc = HttpRuntime.Cache.Get(cachekey) as XDocument;
if (cateGoryDoc == null)
{
XDocument doc = XDocument.Parse(this.ProductList1.getXML());
IEnumerable<XElement> mainCats =
from Category1 in doc.Descendants("product").Descendants("category") select Category1;
var cDoc = new XDocument(new XDeclaration("1.0", "utf-8", null), new XElement("root"));
cDoc.Root.Add(mainCats);
cateGoryDoc = cDoc;
HttpRuntime.Cache.Insert(cachekey, cDoc, null,
DateTime.Now.AddMinutes(10),
TimeSpan.Zero);
}
// I DO NOT WANT TO CHANGE THE DOC IN CACHE!!
if (HttpContext.Current.Request["tCats"] != null)
{
string[] tCats = HttpContext.Current.Request["tCats"].Split(Convert.ToChar(","));
foreach (string tCat in tCats)
{
cateGoryDoc.Root.Add(new XElement("selectedCategory", tCat));
}
}
this.catecoryXML.DocumentContent = cateGoryDoc.ToString();
this.catecoryXML.TransformSource = "/XSLTFile1.xslt";
}