.Net 的 HttpRuntime.Cache 進階運用 CacheDependency

當使用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;
}

  2013-01-25      ez      .NET
SEO│ 用"種香菇"開出流量基本盤

由於日前市場上興起一股辦公室種香菇熱潮,我也跟上了這股熱潮!(✌゚∀゚)☞ 剛開始要踏入種香菇行列的時候,因為不知道怎麼種,所以Google了一下,發現所得都不太詳細,因此心中燃起了"我要發種香菇教學文"、"試著攻佔種香菇的搜尋結果好了"、"有沒有可能利用種香菇打造部落格基礎流量呢?" 基於以上,我在另外一個部落格發表了自己種香菇系列文章,並開始著手實驗

目標︰攻佔搜尋結果,登上種香菇系列的搜尋結果第一頁

 

 任務解析 

想要達成任務,當然得先分析一下影響搜尋結果排名的相關因素,推測大致上有以下幾個

  • 標題跟搜尋關鍵字的關聯
  • 內文跟關鍵字的關聯
  • 文章內的連結
  • 文章的人潮
  • 搜尋後文章被點閱的比例

以上幾個因素的權重不明,前3點可以完全掌控,第4點可以從其他網站導流,第5點則得完全靠文章內容了 當然,接下來的發展會圍繞以上幾點進行


  2013-01-28      ez   
.Net try cache Exception 錯誤編號

抓取 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());
                }

  2013-01-21      ez      .NET
.Net 無法辨識 IE10 導致 _doPostBack 未定義 Javascript 錯誤

程式明明好好的,為什麼切換到IE10就會出現錯誤呢?

原因為 .Net 無法識別 IE 10 的瀏覽器 Header,所以會判斷無法使用指令,此時只要讓 .Net 認得即可。

首先將 .Net Framework 都更新到最新狀態。

利用 cmd 將 browsers 重置,進入 .Net Framework 2.0 或 4.0 目錄。


  2013-06-05      ez      .NET
.Net 加總 平均值 眾數 調和平均數 幾何平均數

只需將數字存入 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;
            }
        }

  2012-11-11      ez      .NET