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