在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ASP.NET Cache是提升系统性能的重要方法,它使用了“最近使用”原则(a least-recently-used algorithm)。在数据库访问中经常会用到Cache保存数据库数据。 1.缓存的添加: Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加: Cache.Add( KeyName,//缓存名 KeyValue,//要缓存的对象 Dependencies,//依赖项 AbsoluteExpiration,//绝对过期时间 SlidingExpiration,//相对过期时间 Priority,//优先级 CacheItemRemovedCallback);//缓存过期引发事件 2. 缓存依赖项: 缓存可以设置的时效性可以通过 文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。 2.1 文件依赖: CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml")); Cache.Insert("GridViewDataSet", dsGrid, fileDepends); 此例为通过Northiwind.xml文件依赖出来缓存的用法: 2.2 其他缓存项依赖: string[] fileDependsArray = {Server.MapPath("Northwind.xml")}; string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"}; CacheDependency cacheDepends = new CacheDependency(fileDependsArray, cacheDependsArray); Cache.Insert("GridViewDataSet", dsGrid, cacheDepends); 此例设置了Northwind.xml文件依赖和 Depend0,depend1,Depend2缓存项 其中Depend0,depend1,Depend2为另外三个缓存。 如果不需要文件依赖可以设置为NULL。 2.3 过期时间设定: AbsoluteExpiration可以设置缓存的绝对过期时间,如: Cache.Insert("GridViewDataSet ", dsGrid, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration); 缓存会在添加起30分钟后过期。 NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20 在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。 Cache.Insert("DataGridDataSet", dsGrid, null,Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30)); 3. 优先级: Priority属性值和意义:
4. 缓存失效事件处理: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Caching; // necessary for CacheDependency using System.Xml; // necessary for Xml stuff public partial class _Default : System.Web.UI.Page { public static CacheItemRemovedCallback onRemove = null; protected void Page_Load(object sender, EventArgs e) { CreateGridView( ); } private void CreateGridView( ) { DataSet dsGrid; dsGrid = (DataSet)Cache["GridViewDataSet"]; onRemove = new CacheItemRemovedCallback(this.RemovedCallback); if (dsGrid == null) { dsGrid = GetDataSet( ); string[] fileDependsArray = {Server.MapPath("Northwind.xml")}; string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"}; CacheDependency cacheDepends = new CacheDependency (fileDependsArray, cacheDependsArray); Cache.Insert("GridViewDataSet", dsGrid, cacheDepends, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, onRemove); lblMessage.Text = "Data from XML file."; } else { lblMessage.Text = "Data from cache."; } gv.DataSource = dsGrid.Tables[0]; gv.DataBind( ); } private DataSet GetDataSet( ) { DataSet dsData = new DataSet( ); XmlDataDocument doc = new XmlDataDocument( ); doc.DataSet.ReadXml(Server.MapPath("Northwind.xml")); dsData = doc.DataSet; return dsData; } public void RemovedCallback(string cacheKey, Object cacheObject, CacheItemRemovedReason reasonToRemove) { WriteFile("Cache removed for following reason: " + reasonToRemove.ToString( )); } private void WriteFile(string strText) { System.IO.StreamWriter writer = new System.IO.StreamWriter( @"C:"test.txt", true); string str; str = DateTime.Now.ToString( ) + " " + strText; writer.WriteLine(str); writer.Close( ); } protected void btnClear_Click(object sender, EventArgs e) { Cache.Remove("GridViewDataSet"); CreateGridView( ); } protected void btnInit_Click(object sender, EventArgs e) { // Initialize caches to depend on. Cache["Depend0"] = "This is the first dependency."; Cache["Depend1"] = "This is the 2nd dependency."; Cache["Depend2"] = "This is the 3rd dependency."; } protected void btnKey0_Click(object sender, EventArgs e) { Cache["Depend0"] = "This is a changed first dependency."; } }
出处:http://www.cnblogs.com/leochu2008/articles/1161772.html ASP.NET Cache是提升系统性能的重要方法,它使用了“最近使用”原则(a least-recently-used algorithm)。在数据库访问中经常会用到Cache保存数据库数据。 1.缓存的添加: Cache的添加方法有Add()或Insert(),两种方法几乎类似,只是Inser方法可以使用可选参数,即使用默认参数,来实现缓存的添加: Cache.Add( KeyName,//缓存名 KeyValue,//要缓存的对象 Dependencies,//依赖项 AbsoluteExpiration,//绝对过期时间 SlidingExpiration,//相对过期时间 Priority,//优先级 CacheItemRemovedCallback);//缓存过期引发事件 2. 缓存依赖项: 缓存可以设置的时效性可以通过 文件依赖,其他缓存依赖,数据库依赖和过期时间方法来设置,当文件改变,依赖缓存项改变,数据库改变或时间的到期时,缓存会失效,并可以引发一定事件。 2.1 文件依赖: CacheDependency fileDepends = new CacheDependency(Server.MapPath("Northwind.xml")); Cache.Insert("GridViewDataSet", dsGrid, fileDepends); 此例为通过Northiwind.xml文件依赖出来缓存的用法: 2.2 其他缓存项依赖: string[] fileDependsArray = {Server.MapPath("Northwind.xml")}; string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"}; CacheDependency cacheDepends = new CacheDependency(fileDependsArray, cacheDependsArray); Cache.Insert("GridViewDataSet", dsGrid, cacheDepends); 此例设置了Northwind.xml文件依赖和 Depend0,depend1,Depend2缓存项 其中Depend0,depend1,Depend2为另外三个缓存。 如果不需要文件依赖可以设置为NULL。 2.3 过期时间设定: AbsoluteExpiration可以设置缓存的绝对过期时间,如: Cache.Insert("GridViewDataSet ", dsGrid, null, DateTime.Now.AddMinutes(30), Cache.NoSlidingExpiration); 缓存会在添加起30分钟后过期。 NoSlidingExpiration可以设置相对过期时间,如果缓存在NoSlidingExpiration设定的时间内没有被访问,缓存过期,如果在这段时间内有访问,则缓存过期时间将会重置为原始值,如NoSlidingExpiration=20 在20分钟内如果没有被访问,缓存过期,如果每次19分钟访问缓存,缓存将永远不会过期。 Cache.Insert("DataGridDataSet", dsGrid, null,Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30)); 3. 优先级: Priority属性值和意义:
4. 缓存失效事件处理: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Web.Caching; // necessary for CacheDependency using System.Xml; // necessary for Xml stuff public partial class _Default : System.Web.UI.Page { public static CacheItemRemovedCallback onRemove = null; protected void Page_Load(object sender, EventArgs e) { CreateGridView( ); } private void CreateGridView( ) { DataSet dsGrid; dsGrid = (DataSet)Cache["GridViewDataSet"]; onRemove = new CacheItemRemovedCallback(this.RemovedCallback); if (dsGrid == null) { dsGrid = GetDataSet( ); string[] fileDependsArray = {Server.MapPath("Northwind.xml")}; string[] cacheDependsArray = {"Depend0", "Depend1", "Depend2"}; CacheDependency cacheDepends = new CacheDependency (fileDependsArray, cacheDependsArray); Cache.Insert("GridViewDataSet", dsGrid, cacheDepends, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, onRemove); lblMessage.Text = "Data from XML file."; } else { lblMessage.Text = "Data from cache."; } gv.DataSource = dsGrid.Tables[0]; gv.DataBind( ); } private DataSet GetDataSet( ) { DataSet dsData = new DataSet( ); XmlDataDocument doc = new XmlDataDocument( ); doc.DataSet.ReadXml(Server.MapPath("Northwind.xml")); dsData = doc.DataSet; return dsData; } public void RemovedCallback(string cacheKey, Object cacheObject, CacheItemRemovedReason reasonToRemove) { WriteFile("Cache removed for following reason: " + reasonToRemove.ToString( )); } private void WriteFile(string strText) { System.IO.StreamWriter writer = new System.IO.StreamWriter( @"C:"test.txt", true); string str; str = DateTime.Now.ToString( ) + " " + strText; writer.WriteLine(str); writer.Close( ); } protected void btnClear_Click(object sender, EventArgs e) { Cache.Remove("GridViewDataSet"); CreateGridView( ); } protected void btnInit_Click(object sender, EventArgs e) { // Initialize caches to depend on. Cache["Depend0"] = "This is the first dependency."; Cache["Depend1"] = "This is the 2nd dependency."; Cache["Depend2"] = "This is the 3rd dependency."; } protected void btnKey0_Click(object sender, EventArgs e) { Cache["Depend0"] = "This is a changed first dependency."; } }
|
请发表评论