此代码“完美”工作。创建一个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";
}
答案 0 :(得分:2)
创建一个新的XDocument。将您从Cache中检索的内容复制到您创建的内容中。
答案 1 :(得分:2)
克隆它是要走的路。
您可以按照以下方式执行此操作:
XDocument cachedDocument = ... get it from the cache ...
XDocument clone = new XDocument(cachedDocument);
... modify the clone