国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Razor使用Parse()時最好指定“緩存名”

2019-11-17 02:02:09
字體:
來源:轉載
供稿:網友

Razor使用Parse()時最好指定“緩存名”

為什么?

本文的標題,明顯有一種提醒的口吻。

從18年的生活經驗看,如果想提醒人要怎么辦,不要怎么辦。

最好說明原因。那么小編開始說明原因嘍。

哦對,說原因之前,先說交代一下背景,一句話 在非mvc下使用Razor模板引擎。(end)

仍然是這個流程圖,我們知道Razor模板引擎,在工作的時候是生成C#代碼執行,生成程序集,再調用程序集生成html。

也就是說如果沒有意外的話,每次請求,都會生成一個程序集。(會反復執行圖中黃圈里的代碼。)

而我們知道這些生成程序集是非常耗時的,而且多個程序集會占用資源。

這就是小編強調要的指定緩存名的原因。那么我們接下來看看如何使用“緩存”。

其實說起來復雜,做起來很容易!

clipboard[5]

如何使用

1.指定緩存名會變得快一些

這樣一段代碼。

string cshtml =File.ReadAllText("路徑");

for(int i =0;i<500;i++)

{

// 在這個例子中,會形成500個隨機命名的程序集

string html1 = Razor.Parse(cshtml);

//在這個例子中,解析cshtml文件,同時給了一個“緩存名”。

//這次一旦編譯成功,下次Parse()就不再重復編譯。直到cshtml文件被修改。

string html2 = Razor.Parse(cshtml,null,"cccc");//"cccc"是隨意起的名字。

}

剛剛說的“緩存名”可能有點含糊,我也不知道怎么叫這個東西。就是上文例子中的

“cccc”,給了這個參數后,以后的相同請求就不再重新隨機命名的去創建了。

2.指定什么名合適?

我這個例子中的做法是【cshtml文件全路徑】+【文件上次修改時間】的一種策略。

當然也可以用文件的md5啊什么的。

我的理解是,只要能唯一識別一個cshtml文件即可。(當然,不止同名。文件修改前和文件修改后不算同一個文件。)

string fullpath ="全路徑";

string cshtml = File.ReadAllText(fullpath);

//“緩存名” =【cshtml文件全路徑】+【文件上次修改時間】

string cacheName = fullpath + File.GetLastWriteTime(fullpath);

Razor.Parse(cshtml,null,cacheName);

3.封裝一個RazorHelper

基于以上 1、2的觀點(1.指定"緩存名" 2.“緩存名“=【cshtml文件全路徑】+【文件上次修改時間】)

本文討論的問題已然解決,但是經過1、2操作以后,多出來好多代碼,而且這些代碼是可以復用的。

所以呢,封裝一個RazorHelper把1.2.對應的代碼扔到一個方法里去。

public class RazorHelper

{

//直接敲的,沒VS就不寫文檔注釋了。

public static string Parse(HttpContext context,

string cshtmlVirtualPath,Object model)

{

string fullpath = context.Server.MapPath(cshtmlVirtualPath);

string cshtml = File.ReadAllText(fullpath);

string cacheName = fullpath+File.GetLastWriteTime(fullpath);

string html =Razor.Parse(cshtml,model,cacheName);

return html;

}

}

當然RazorHelper只有這么一個方法的話,有點逗B。。。

接下來的幾篇文章里,我會逐步讓他豐富起來。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福贡县| 镇巴县| 华安县| 怀柔区| 普兰店市| 江孜县| 澜沧| 包头市| 广宁县| 香河县| 外汇| 四子王旗| 邻水| 廉江市| 卢氏县| 蓬莱市| 安庆市| 大同市| 永济市| 元氏县| 固始县| 吉木乃县| 寿光市| 洪湖市| 南丰县| 米泉市| 海盐县| 涪陵区| 徐水县| 鄂温| 定日县| 松滋市| 宝坻区| 马公市| 江西省| 广南县| 沙田区| 凌源市| 莱芜市| 芦溪县| 东乌珠穆沁旗|