ASP.net缓存单例模式
发布时间:2020-12-16 03:58:37 所属栏目:asp.Net 来源:网络整理
导读:我有一个巨大的 XML文档,我必须解析它以生成域对象. 因为文档很大,我不想在每次用户请求时解析它,而只是第一次,然后将所有对象保存到缓存中. public ListProduct GetXMLProducts(){ if (HttpRuntime.Cache.Get("ProductsXML") != null) { return (ListProduc
我有一个巨大的
XML文档,我必须解析它以生成域对象.
因为文档很大,我不想在每次用户请求时解析它,而只是第一次,然后将所有对象保存到缓存中. public List<Product> GetXMLProducts() { if (HttpRuntime.Cache.Get("ProductsXML") != null) { return (List<Product>)(HttpRuntime.Cache.Get("ProductsXML")); } string xmlPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"ContentProducts.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; } 如何使这个函数在单例中工作并且是线程安全的最佳方法是什么? 修复了将对象保存到缓存方法(是一个复制粘贴错误) 解决方法
创建一个Lazy静态并在内存中保留应用程序的生命周期.并且不要忘记“真正的”部分,这就是它使线程安全的原因.
public static readonly Lazy<List<Product>> _product = new Lazy<List<Products>>(() => GetProducts(),true); 要将其添加到模型中,只需将其设为私有并返回_product.Value; public MyModel { ... bunch of methods/properties private static readonly Lazy<List<Product>> _products = new Lazy<List<Products>>(() => GetProducts(),true); private static List<Product> GetProducts() { return DsLayer.GetProducts(); } public List<Product> Products { get { return _products.Value; } } } 要使用Lazy<>创建单例,请使用此模式. public MyClass { private static readonly Lazy<MyClass> _myClass = new Lazy<MyClass>(() => new MyClass(),true); private MyClass(){} public static MyClass Instance { get { return _myClass.Value; } } }
在上下文中使用的另一种惰性模式(即Session) 在Session中保存的一些模型: public MyModel { private List<Product> _currentProducts = null; public List<Product> CurrentProducts { get { return this._currentProducts ?? (_currentProducts = ProductDataLayer.GetProducts(this.CurrentCustomer)); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-4 – 返回状态代码未经授权在WebAPI中定制IAct
- asp.net-mvc-4 – 未终止字符串常量MVC4 Razor视图引擎
- asp.net – 创建新的实体数据模型的麻烦
- asp.net-mvc – visual studio 2013“添加控制器”丢失
- asp.net-mvc-4 – 在VS2012中运行代码分析时出错
- [你必须知道的.NET] 开篇有益
- 优化 – 字典/客户端VS应用程序变量
- .net – 尝试激活“MyDbContext”时无法解析“DatabaseConf
- 实体框架 – 对ASP.NET MVC Onion架构的意见
- asp.net – 什么时候应该在服务器控件上启用EnableViewStat
推荐文章
站长推荐
- ASP.NET控件的命运
- 我们可以通过.net native编译asp.net 5应用程序吗
- 绘制图表到ASP.NET MVC 4(Razor,C#)网站
- ASP.NET和MySQL .Net Framework数据提供程序问题
- asp.net – 访问在DelegatingHandler中执行的当前
- asp.net – SqlFunctions.StringConvert添加不必
- ASP.NET 程序中删除文件夹导致session失效问题的
- asp.net-mvc – 自定义控制器工厂,依赖注入/结构
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之后
- ASP / C#会话变量 – 未将对象引用设置为对象的实
热点阅读