HttpContext HttpRuntime
問題引出
HttpContext.Current.Cache .VS. HttpRuntime.Cache
- HttpRuntime.Cache:獲取當(dāng)前應(yīng)用程序的Cache
- HttpContext.Current.Cache:為當(dāng)前HTTP請求獲取Cache對象,跨線程可用,在APM模式或創(chuàng)建了子線程的場景中不能用
HttpContext.Current.Cache 調(diào)用 HttpRuntime.Cache實(shí)現(xiàn),兩者指向同一 Cache對象:
- HttpRuntime.Cache相當(dāng)于是緩存具體實(shí)現(xiàn)類,非Web應(yīng)用下也可以使用
- HttpContext.Current.Cache是對緩存類的封裝,局限HttpContext只能用于Web應(yīng)用
在某些情況下,HttpContext還沒被創(chuàng)建出來為null,就只能用 HttpRuntime.Cache。
- 定時(shí)器的回調(diào)。
- Cache的移除通知。
- APM模式下異步完成回調(diào)。
- 主動(dòng)創(chuàng)建線程或者將任務(wù)交給線程池來執(zhí)行
建議使用 HttpRuntime.Cache,既能減少出錯(cuò),也減少一次函數(shù)調(diào)用。
eg:在獲取程序\站點(diǎn)的根目錄時(shí)盡量使用 System.Web.HttpRuntime.AppDomainAppPath。
其中,關(guān)于 APM模式 參見:https://www.cnblogs.com/mcgrady/p/5660314.html
HttpContext
限制:同一Http請求
Server.Transfer .VS. Response.Redirect
Server.Transfer 請求跳轉(zhuǎn)頁面,歸屬同一個(gè)http請求,URL無變化,所有操作均在服務(wù)器完成;Response.Redirect 則是重新發(fā)起新的頁面請求,需要瀏覽器和服務(wù)器交互。
具體參見:HttpContext 初識(shí);
HttpContext.Current 由其維護(hù)
System.Runtime.Remoting.Messaging.CallContext.HostContext as HttpContext其中,CallContext.HostContext 表示:獲取或設(shè)置與當(dāng)前線程相關(guān)聯(lián)的主機(jī)上下文 。
- HttpContext.Current? 并非無處不在
- 我所知道的HttpContext.Current:推薦
APM模式下的異步完成回調(diào),訪問HttpContext.Current方法:推薦第2種方法
- 在類型中添加一個(gè)字段來保存HttpContext的引用(異步開始前)
- 將HttpContext賦值給BeginXXX方法的最后一個(gè)參數(shù)(object state)
HttpRuntime
使用時(shí)建議自行封裝,可參見:ASP.Net HttpRuntime.Cache 使用總結(jié);
獲取或設(shè)置與當(dāng)前線程相關(guān)聯(lián)的主機(jī)上下文
轉(zhuǎn)載于:https://www.cnblogs.com/wjcx-sqh/p/11093956.html
總結(jié)
以上是生活随笔為你收集整理的HttpContext HttpRuntime的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【资讯】全球瞩目!无人驾驶真的来了!
- 下一篇: TypeError: missing 1