コード例 #1
0
        public static void Flush(this HttpRuntimeCacheProvider cacheProvider, Func <String, Boolean> predicate)
        {
            var cacheFilename = GetCacheFilePath(cacheProvider);

            using (var stream = new FileStream(cacheFilename, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                using (var writer = new StreamWriter(stream)) {
                    var prefix = cacheProvider.BuildCacheKey(null);

                    stream.SetLength(0L);
                    var entries = HttpRuntime.Cache.OfType <DictionaryEntry>()
                                  .Where(cacheProvider.Hit)
                                  .Where(r => predicate(((String)r.Key).Substring(prefix.Length)));
                    var json = new JavaScriptSerializer();
                    foreach (var entry in entries)
                    {
                        writer.WriteLine(json.Serialize(entry));
                    }
                    writer.Flush();
                }
        }
コード例 #2
0
        public static T Restore <T>(this HttpRuntimeCacheProvider cacheProvider, String key)
        {
            var cacheFilename = GetCacheFilePath(cacheProvider);

            if (!File.Exists(cacheFilename))
            {
                return(default(T));
            }
            //{"Key":"HRCP_??","Value":??}
            var cacheLineStart  = String.Format("{{\"Key\":\"{0}\",\"Value\":", cacheProvider.BuildCacheKey(key));
            var cacheCollection = File.ReadLines(cacheFilename);
            var cacheLine       = cacheCollection.FirstOrDefault(c => c.StartsWith(cacheLineStart));

            if (cacheLine == null)
            {
                return(default(T));
            }

            cacheLine = cacheLine.Substring(cacheLineStart.Length, cacheLine.Length - cacheLineStart.Length - 1);
            var json = new JavaScriptSerializer();

            return(json.Deserialize <T>(cacheLine));
        }