首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 非同步頁面提升 I/O 密集型應用擴展性

     編輯:關於ASP.NET

同步頁面的擴展性瓶頸

ASP.NET 從執行緒池取得執行緒處理請求。同步頁面在 I/O 操作(呼叫 Web Service、查詢遠端資料庫)期間持有執行緒處於阻塞狀態,導致執行緒池耗盡,新請求排隊甚至回傳 503 錯誤。

非同步頁面運作原理

  1. 請求開始由執行緒池執行緒處理。
  2. 發起非同步 I/O 作業後,執行緒歸還執行緒池服務其他請求。
  3. I/O 完成觸發完成通知,ASP.NET 再取得另一執行緒完成後續處理(Render 等)。

此機制大幅提升 I/O 密集型應用的吞吐量與回應速度。

ASP.NET 2.0 宣告式非同步頁面實作

  1. 頁面指令加入 Async="true"。
  2. 在 Page_Load 等早期事件呼叫 AddOnPreRenderCompleteAsync 註冊 Begin/End 方法:
AddOnPreRenderCompleteAsync(
    new BeginEventHandler(BeginCallWebService),
    new EndEventHandler(EndCallWebService)
);

BeginCallWebService 發起非同步作業(如 WebRequest.BeginGetResponse),回傳 IAsyncResult;EndCallWebService 取得結果並儲存供 PreRenderComplete 階段使用。

對比 ASP.NET 1.x 手工實作

1.x 需自行實作 IHttpAsyncHandler、管理自訂執行緒池、處理 ManualResetEvent 同步,極易出錯。2.0 內建基礎建設簡化為兩行註冊代碼,開發者專注於業務非同步邏輯。

適用場景與注意事項

  • 適用:呼叫外部 Web Service、長時間資料庫查詢、檔案 I/O、網路串流。
  • CPU 密集型運算不適合(仍佔用執行緒),應考慮背景工作或分散式運算。
  • 非同步頁面不可使用 Response.Write、Server.Transfer 等同步 API。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved