當使用Cache常會發現,不知道何時要清除快取的窘境,太快清除就無法達到Cache效果,太慢又無法即時更新資訊! 本篇利用CacheDependency偵測檔案變更時,自動清除Cache,達到隨時都是最新資訊。
以下方式即可偵測檔案XXX.dat,如果檔案變更了,就會自動清除Cache:
CacheDependency CD = new CacheDependency(Server.MapPath("~/XXX.dat")); HttpRuntime.Cache.Add("cache key", "cache body", CD, DateTime.MaxValue, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);
如果要釋放快取時呼叫指定Function,並且超過20秒未使用也會釋放,如下:
HttpRuntime.Cache.Add("cache key", "cache body", CD, DateTime.Now.AddSeconds(20), TimeSpan.Zero, CacheItemPriority.High, RemovedCallback);
public void RemovedCallback(String k, Object v, CacheItemRemovedReason r) { var key = k; var value = v; }
由於日前市場上興起一股辦公室種香菇熱潮,我也跟上了這股熱潮!(✌゚∀゚)☞ 剛開始要踏入種香菇行列的時候,因為不知道怎麼種,所以Google了一下,發現所得都不太詳細,因此心中燃起了"我要發種香菇教學文"、"試著攻佔種香菇的搜尋結果好了"、"有沒有可能利用種香菇打造部落格基礎流量呢?" 基於以上,我在另外一個部落格發表了自己種香菇系列文章,並開始著手實驗
目標︰攻佔搜尋結果,登上種香菇系列的搜尋結果第一頁
任務解析
想要達成任務,當然得先分析一下影響搜尋結果排名的相關因素,推測大致上有以下幾個
- 標題跟搜尋關鍵字的關聯
- 內文跟關鍵字的關聯
- 文章內的連結
- 文章的人潮
- 搜尋後文章被點閱的比例
以上幾個因素的權重不明,前3點可以完全掌控,第4點可以從其他網站導流,第5點則得完全靠文章內容了 當然,接下來的發展會圍繞以上幾點進行
抓取 try cache Exception 錯誤編號 方法如下:
try { } catch (Exception ex) { int ErrorCode = 0; Win32Exception W32EX = ex as Win32Exception; if (W32EX == null) W32EX = ex.InnerException as Win32Exception; if (W32EX != null) ErrorCode = W32EX.ErrorCode; Console.WriteLine(ErrorCode.ToString()); }
未壓縮:
已壓縮:
程式明明好好的,為什麼切換到IE10就會出現錯誤呢?
原因為 .Net 無法識別 IE 10 的瀏覽器 Header,所以會判斷無法使用指令,此時只要讓 .Net 認得即可。
首先將 .Net Framework 都更新到最新狀態。
利用 cmd 將 browsers 重置,進入 .Net Framework 2.0 或 4.0 目錄。
http://www.neustar.biz/enterprise/resources/web-performance/instant-test
只需將數字存入 List 帶入 Function 即可計算出結果。
/// <summary> /// 平均值 /// </summary> /// <param name="val"></param> /// <returns></returns> static double AVG(List<double> val) { try { double _sum = SUM(val); if (_sum > 0 && val.Count > 0) { double _avg = _sum / (double)val.Count; return _avg; } else return 0; } catch { return 0; } } /// <summary> /// 加總 /// </summary> /// <param name="val"></param> /// <returns></returns> static double SUM(List<double> val) { try { if (val.Count > 0) return (from g in val select g).Sum(); else return 0; } catch { return 0; } } /// <summary> /// 眾數 /// </summary> /// <param name="val"></param> /// <returns></returns> static double Mode(List<double> val) { try { val.Sort(); double num = val.First(); int count = 0; double max_num = num; int max_count = 0; foreach (double v in val) { if (v == num) count++; else { if (max_count < count) { max_num = num; max_count = count; } num = v; count = 1; } } return max_num; } catch { return 0; } } /// <summary> /// 調和平均數 /// </summary> /// <param name="val"></param> /// <returns></returns> static double HarmonicAverage(List<double> val) { try { int i = 0; double num = 0; foreach (double v in val) { if (v > 0) { i++; num += 1 / v; } } if (i > 0 && num > 0) return i / num; else return 0; } catch { return 0; } } /// <summary> /// 幾何平均數 /// </summary> /// <param name="val"></param> /// <returns></returns> static double GeometricMean(List<double> val) { try { int r = 0; double prod = 1; foreach (double v in val) { if (prod * v > double.MaxValue) { prod = Math.Pow(prod, 1.0 / r); r = 0; } r++; prod *= v; } return Math.Pow(prod, 1.0 / r); } catch { return 0; } }