我有一个帮助类,它读取一个大的 XML 文档并生成一个 c# 对象列表。
我经常使用这些对象,所以我认为最好的方法是将它们保存在内存中,然后从那里访问它们。
我做了一个简单的存储库,它从内存中获取一个对象,如果不存在,它会添加它。
存储库如下所示:
public class XmlDocumentRepository
{
private readonly ICacheStorage _cacheStorage;
public XmlDocumentRepository(ICacheStorage cacheStorage)
{
_cacheStorage = cacheStorage;
}
private readonly object _locker = new object();
private void DeserializeXmlDocument()
{
lock (_locker)
{
// I deserialize the xml document, i generate the c# classes, and save them in cache
IEnumerable<Page> pages = new XmlDeserializerHelper().DeserializeXml();
foreach(var page in pages)
{
_cacheStorage.Add(page_Id, page);
}
}
}
public Page GetPage(Guid page_Id)
{
Page page = _cacheStorage.Get<Page>(page_Id);
if (page != null)
return page;
lock (_locker)
{
page = _cacheStorage.Get<Page>(page_Id);
if (page != null)
return page;
DeserializeXmlDocument();
page = _cacheStorage.Get<Page>(page_Id);
return page;
}
}
}
用于 Web 应用程序(更准确地说是XmlDocumentRepository
asp.net mvc)。
存储库的实现是否良好?我lock
是否正确使用了这些语句?