ASP.NET 2.0頁面性能的考慮
2006/12/6 8:11:31
一般情況下我們通常在一個頁面中,結合頁面事件處理模型,按順序一步一步的聲明各個處理過程。這就是所說的同步處理(Synchronous),我們可以很方便的定義頁面處理的順序。同步處理雖然很方便,但在耗時高請求處理的時候就會暴露嚴重的問題,在一個高并發的網站生產服務器上,由于.net處理是基于所謂的ThreadPool的,而Threadpool中的處理線程又是有限的,如果當前ThreadPool中的線程已經全部用盡,而后繼又有不斷的大規模請求的話,服務器的性能就會嚴重的下降,更嚴重的還會使服務器崩潰。所以我們關心最多的就是怎樣來更好的使用的.net ThreadPool。讓.net更好的發揮的性能。
說到這就不得不談.net的異步處理(Asynchronous),模型一般為BeginXXX,EndXXX,BeginXXX返回一個IAsycResult對象,其中包含對當前異步操作的信息,而EndXXX用戶接受返回值,輸出參數。.net從ThreadPool中分配一個空閑線程給BeginXXX然后立即返回給ThreadPool,等到異步處理結束時,.net又從ThreadPool中分配一個空閑線程用于處理EndXXX方法。這樣就可能有足夠的線程用于處理其它的事情。見于篇幅問題這里我們只談asp.net 2.0的異步處理模型,我們都知道在1.x的時候要很好的建立頁面的異步處理是比較麻煩的,可能微軟很早就認識到了這一點,所以在2.0的版本中引入的新的頁面處理模型,加入了方便的異步處理點(Asynchronous Point)在PreRender事件和PreRenderComplete事件之間,在這個異步點,頁面需要等待所有的異步處理都完成,所以可以在頁面呈現之前完成你需要的任何效果,極大簡化了建立異步頁面的方法。
首先你要在建立頁面的@page聲明中加入 Async="true",這是必須的。設置告訴asp.net要選用IHttpAsyncHandler來處理當前的頁面。接下來你需要做的一般是在Page_Load事件處理中使用異步處理過程,現在有兩種途徑:
第一種就是使用Page.AddOnPreRenderCompleteAsync方法來處理需要異步處理的Begin和End方法集.如下:
AddOnPreRenderCompleteAsync(new BeginEventHandler(MyBeginMethod),new EndEventHandler(myEndMethod));
通過添加上面的方法后,頁面執行通常的生命周期事件直到頁面的PreRender事件觸發.然后Asp.net調用先前在AddOnPreRenderCompleteAsync中的注冊的Begin處理程序。通常在Begin處理程序中處理的是一些異步的web服務,IO以及SQL的處理,這樣就可以極大的緩解.net線程池的壓力。例如:
<%@ Page Async="true" Language="C#" %>
<asp:Content ID="Content" ContentPlaceHolderID="Main" Runat="server">
<asp:Label ID="Output" Runat="server"></asp:Label>
</asp:Content>
public partial class AsyncPage : System.Web.UI.Page
{
private WebRequest m_Request;
void Page_Load (object sender, EventArgs e)
{
AddOnPreRenderCompleteAsync (
new BeginEventHandler(BeginAsyncOperation),
new EndEventHandler (EndAsyncOperation)
);
}
IAsyncResult BeginAsyncOperation (object sender, EventArgs e, AsyncCallback cb, object state)
{
m_Request = WebRequest.Create("http://www.dofor.cn");
return m_Request.BeginGetResponse (cb, state);
}
void EndAsyncOperation (IAsyncResult ar)
{
string text;
using (WebResponse response = m_Request.EndGetResponse(ar))
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
text = reader.ReadToEnd();
}
}
Regex regex = new Regex ("href\\s*=\\s*\"([^\"]*)\"", RegexOptions.IgnoreCase
下一頁
返回列表
返回首頁
主站蜘蛛池模板:
国产三级无码内射在线看|
日韩福利片午夜在线观看|
国产h视频在线观看|
久久国产精品偷|
欧美成人片在线观看|
国产区女主播在线观看|
窝窝影院午夜看片|
在线视频欧美日韩|
一本高清在线视频|
抱着娇妻让粗黑人人玩3p|
久久精品中文闷骚内射|
欧美三级免费观看|
亚洲欧洲另类春色校园网站|
色屁屁影视大全|
国产成人一区二区三区精品久久|
a级毛片免费全部播放无码|
日本爆乳片手机在线播放|
亚洲人成在线播放网站岛国|
正在播放宾馆露脸对白视频|
四虎影院永久网址|
2021国内精品久久久久影院|
天堂√在线中文资源网|
久久天天躁狠狠躁夜夜不卡|
欧洲成人午夜精品无码区久久
|
两夫妇交换的一天|
日本特黄特色aaa大片免费|
亚洲欧美专区精品久久|
美女羞羞视频免费网站|
国产欧美第一页|
18精品久久久无码午夜福利|
在线中文字幕日韩欧美|
h肉3d动漫在线观看网站|
日日婷婷夜日日天干|
久久精品国产亚洲香蕉|
最近高清中文在线国语字幕
|
亚洲国产欧美在线看片一国产|
91香蕉视频成人|
国产精品无码不卡一区二区三区
|
好男人在线社区www在线视频一|
久久精品国产大片免费观看|
污污内射在线观看一区二区少妇
|