In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-04-01 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >
Share
Shulou(Shulou.com)06/03 Report--
This article mainly introduces "the function introduction of ASP.NET emptying cache". In the daily operation, I believe that many people have doubts about the function introduction of ASP.NET emptying cache. The editor consulted all kinds of data and sorted out simple and easy-to-use operation methods. I hope it will be helpful to answer the doubts of "introduction to ASP.NET emptying cache function". Next, please follow the editor to study!
To do a cache cleaning function in the website (that is, forcing the cache to expire before the cache expires), some places in the program use the HttpRuntime.Cache to do the cache, while the part that interacts with the database uses the cache mechanism provided by ObjectDataSource. Cleaning HttpRuntime.Cache 's cache is simple, as long as
List keys = new List (); / / retrieve application Cache enumerator IDictionaryEnumerator enumerator = HttpRuntime.Cache.GetEnumerator (); / / copy all keys that currently exist in Cache while (enumerator.MoveNext ()) {keys.Add (enumerator.Key.ToString ());} / / delete every key from cache for (int I = 0; I
< keys.Count; i++) { HttpRuntime.Cache.Remove(keys[i]); } 就可以了。 本以为ObjectDataSource等数据源的缓存也是保存在HttpRuntime.Cache中,经过测试没想到竟然不是,因为执行上面的代码以后ObjectDataSource仍然是从缓存读取数据。 使用Reflector反编译发现ObjectDataSource是使用HttpRuntime.CacheInternal来实现的缓存。CacheInternal是internal的,因此没法直接写代码调用,同时CacheInternal中也没提供清空缓存的方法,只能通过实验发现_caches._entries是保存缓存的Hashtable,因此就用反射的方法调用CacheInternal,然后拿到_caches._entries,最后clear才算ok。 最终代码如下: //HttpRuntime下的CacheInternal属性(Internal的,内存中是CacheMulti类型)是ObjectDataSource等DataSource保存缓存的管理器 //因为CacheInternal、_caches、_entries等都是internal或者private的,所以只能通过反射调用,而且可能会随着.Net升级而失效 object cacheIntern = CommonHelper.GetPropertyValue(typeof(HttpRuntime), "CacheInternal") as IEnumerable; //_caches是CacheMulti中保存多CacheSingle的一个IEnumerable字段。 IEnumerable _caches = CommonHelper.GetFieldValue(cacheIntern, "_caches") as IEnumerable; foreach (object cacheSingle in _caches) { ClearCacheInternal(cacheSingle); } private static void ClearCacheInternal(object cacheSingle) { //_entries是cacheSingle中保存缓存数据的一个private Hashtable Hashtable _entries = CommonHelper.GetFieldValue(cacheSingle, "_entries") as Hashtable; _entries.Clear(); } mary>/ / get the value of static attribute propertyName of type type / public static object GetPropertyValue (Type type, string propertyName) {foreach (PropertyInfo rInfo in type.GetProperties (BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance)) {if (rInfo.Name = = propertyName) {return rInfo.GetValue (null, new object [0]);} throw new Exception ("attribute not found:" + propertyName) } / get the value of propertyName attribute of object object / public static object GetPropertyValue (object obj, string propertyName) {Type type = obj.GetType (); foreach (PropertyInfo rInfo in type.GetProperties (BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance)) {if (rInfo.Name = = propertyName) {return rInfo.GetValue (obj, new object [0]) }} throw new Exception ("cannot find attribute:" + propertyName);} public static object GetFieldValue (object obj, string fieldName) {Type type = obj.GetType (); foreach (FieldInfo rInfo in type.GetFields (BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance)) {if (rInfo.Name = = fieldName) {return rInfo.GetValue (obj);}} throw new Exception ("cannot find Field:" + fieldName);}
Because the above method is called through the method of crack, it may have potential problems, so it is for reference only.
Search on google to find another article, the backbone is the code, the idea of the code is the same as mine, posted here for reference.
Private void clearOutputCache () {Type ct = this.Cache.GetType (); FieldInfo cif = ct.GetField ("_ cacheInternal", BindingFlags.NonPublic | BindingFlags.Instance); Type cmt = Cache.GetType (). Assembly.GetType ("System.Web.Caching.CacheMultiple"); Type cachekeyType = Cache.GetType (). Assembly.GetType ("System.Web.Caching.CacheKey"); FieldInfo cachesfield = cmt.GetField ("_ caches", BindingFlags.NonPublic | BindingFlags.Instance); object cacheInternal = cif.GetValue (this.Cache) Object caches = cachesfield.GetValue (cacheInternal); Type arrayType = typeof (Array); MethodInfo arrayGetter = arrayType.GetMethod ("GetValue", new Type [] {typeof (int)}); object cacheSingle = arrayGetter.Invoke (caches, new object [] {1}); FieldInfo entriesField = cacheSingle.GetType (). GetField ("_ entries", BindingFlags.Instance | BindingFlags.NonPublic); Hashtable entries = (Hashtable) entriesField.GetValue (cacheSingle); List keys = new List () Foreach (object o in entries.Keys) {keys.Add (o);} MethodInfo remove = cacheInternal.GetType (). GetMethod ("Remove", BindingFlags.NonPublic | BindingFlags.Instance, null, new Type [] {cachekeyType, typeof (CacheItemRemovedReason)}, null); foreach (object key in keys) {remove.Invoke (cacheInternal, new object [] {key, CacheItemRemovedReason.Removed}) }} at this point, the study on "introduction to the function of ASP.NET to clear the cache" is over. I hope to be able to solve your doubts. The collocation of theory and practice can better help you learn, go and try it! If you want to continue to learn more related knowledge, please continue to follow the website, the editor will continue to work hard to bring you more practical articles!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.