我有一個巨大的XML文檔,我必須解析它來生成域對象。ASP.net緩存+單例模式
由於文檔很大,我不想每次用戶請求時都解析它,但只是第一次,然後將所有對象保存到緩存中。
public List<Product> GetXMLProducts()
{
if (HttpRuntime.Cache.Get("ProductsXML") != null)
{
return (List<Product>)(HttpRuntime.Cache.Get("ProductsXML"));
}
string xmlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Content\\Products.xml");
XmlReader reader = XmlReader.Create(xmlPath);
XDocument doc = XDocument.Load(reader);
List<Product> productsList = new List<Product>();
// Parsing the products element
HttpRuntime.Cache.Insert("ProductsXML", productsList);
return productsList;
}
我如何才能使這個函數在singleton中工作並且是線程安全的?
修正了保存對象到緩存方法(被複制 - 粘貼錯誤)
如果您從使用會話的頁面調用它,而不是從任何其他線程調用該會話,則會話會鎖定所有讀/寫並使其安全。 – Aristos 2012-07-16 10:44:01