﻿# 如何追蹤 ASP.NET 網站各頁面的執行狀況與效能

通常要監測 ASP.NET 網頁的執行狀況與效能會使用 Trace (追蹤) 功能，大致上追蹤分兩種層級，一種是「網頁層級的追蹤」，另一種是「應用程式層級的追蹤」。

第一種：網頁層級的追蹤

> 顧名思義就是針對單一網頁的追蹤，你只要在頁面最上方的 Page 指示詞中加入 Trace="true" 屬性就可以啟用了。
> 
>     ![網頁層級的追蹤，顧名思義就是針對單一網頁的追蹤，你只要在頁面最上方的 Page 指示詞中加入 Trace="true" 屬性就可以啟用了](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/649be26675e24334d531-Screenshot-080329-184932.png "網頁層級的追蹤，顧名思義就是針對單一網頁的追蹤，你只要在頁面最上方的 Page 指示詞中加入 Trace=\"true\" 屬性就可以啟用了")
> 
> 而執行起來後就會出現該頁面中執行時期完整的詳細資訊，包括 HTTP Request 的詳細資訊、追蹤資訊(Page類別中預設事件的執行時間)、整個網頁的控制項樹狀結構、所有的 Session、Cookie、HTTP Header、Form 集合、QueryString 集合、伺服器變數、......等。十分的完整而詳細，對於開發的時候除錯十分的有用。
> 
>     ![網頁層級的追蹤畫面](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8f6f81ad003bc2b141ba-Screenshot-080329-185425.png "網頁層級的追蹤畫面")
> 
> 而在你自己的 Code Behind 事件程式中，就可以使用 Trace.Write 或 Trace.Warn 方法來設定輸出你追蹤的時間點與備註說明，另一方面，對於初學者來說，比較不清楚「事件執行順序」的人也可以透過 Trace 功能協助你瞭解每一個事件的執行順序。而 Trace.Write 方法與 Trace.Warn 方法唯一的不同就是用 Trace.Warn 所輸出的文字是紅色的。
> 
>     ![可以使用 Trace.Write 或 Trace.Warn 方法來設定輸出你追蹤的時間點與備註說明](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6ed9d2ba5149c984b97a-Screenshot-080329-185757.png "可以使用 Trace.Write 或 Trace.Warn 方法來設定輸出你追蹤的時間點與備註說明")
> 
> 另外，你也可以在你自己開發的 .NET 元件中使用 HttpContext.Current.Trace.Write 來輸出需要追蹤的訊息。 
> 
>     ![你也可以在你自己開發的 .NET 元件中使用 HttpContext.Current.Trace.Write 來輸出需要追蹤的訊息。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c6fe61830d417be590cd-Screenshot-080329-190253.png "你也可以在你自己開發的 .NET 元件中使用 HttpContext.Current.Trace.Write 來輸出需要追蹤的訊息。")
> 
> 你如果要監控某個事件的執行時間的話，就可以在事件的第一行程式碼寫入一段 Trace.Write 程式，在最後一行寫入 Trace.Write 程式，就可以記錄到這個時間到底執行多少時間了，而你要看的追蹤欄位是「從最末項開始(秒)」這一欄，因為這一欄是指從「上一個追蹤點到這個追蹤點所花費的時間」。

第二種：應用程式層級的追蹤

> 這個方式可以在整個網站下進行追蹤，不用特別開啟每一頁的追蹤，只要在 web.config 的 <system.web> 區段下宣告以下的設定即可。
> 
> ```html
> <trace enabled="true" pageOutput="true" requestLimit="100" traceMode="SortByTime" localOnly="true" />
> ```
> 
> 開啟後原本的頁面都不會變，但是每一頁在執行的時候都會將追蹤資訊寫入到記憶體中，你可以進入該網站或該虛擬目錄下的  trace.axd 頁面就可以看到所有追蹤的資訊。
> 
> 例如：[http://localhost:1997/trace.axd](http://localhost:1997/trace.axd) 或 [http://localhost/webapp1/trace.axd](http://localhost/webapp1/trace.axd)
> 
> ![應用程式層級的追蹤畫面](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2cd587571469797ad619-Screenshot-080329-191234.png "應用程式層級的追蹤畫面")
> 
> 每一項追蹤的後面都有「檢視詳細資料」，點進去後就會看到跟「網頁層級的追蹤」一模一樣的資料了，這對於正式主機上的效能監測十分便利，因為有些數據在開發的時候是偵測不出來的，但如果你有辦法再開發時期做好完整的壓力測試的話，當然最好不要在正式執行的環境進行追蹤分析，因為這會對網站的執行效能造成很大的影響。

除了用 Trace 功能之外，要追蹤網頁執行效能還可以用 [Log Parser](http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en "Log Parser 2.2 Download") 工具直接從 IIS 產生的 Log 檔進行分析，找出一段時間內執行最久的頁面，然後針對這些執行最久的頁面進行細部的追蹤分析。

底下列出一些使用 Log Parser 分析網頁效能與追蹤潛在問題的文章連結：

-   How To Use IIS Log Files In Performance Testing  
    [http://channel9.msdn.com/wiki/default.aspx/PerformanceWiki.HowToIISLogPerf](http://channel9.msdn.com/wiki/default.aspx/PerformanceWiki.HowToIISLogPerf "How To Use IIS Log Files In Performance Testing")  
    
-   Log Parser 2.2 and ASP.NET  
    [http://support.microsoft.com/?scid=kb;en-us;910447&x=11&y=14](http://support.microsoft.com/?scid=kb;en-us;910447&x=11&y=14 "Log Parser 2.2 and ASP.NET")

**相關連結**

-   ASP.NET 追蹤概觀  
    [http://msdn2.microsoft.com/zh-tw/library/bb386420.aspx](http://msdn2.microsoft.com/zh-tw/library/bb386420.aspx "ASP.NET 追蹤概觀")  
      
    
-   ASP.NET 效能  
    [http://msdn2.microsoft.com/zh-tw/library/44e5wy6k.aspx](http://msdn2.microsoft.com/zh-tw/library/44e5wy6k.aspx "ASP.NET 效能")  
      
    
-   ASP.NET 健康監視事件概觀  
    [http://msdn2.microsoft.com/zh-tw/library/bb398933.aspx](http://msdn2.microsoft.com/zh-tw/library/bb398933.aspx "ASP.NET 健康監視事件概觀")  
      
    
-   The Basics of .NET Tracing  
    [http://www.asp101.com/articles/robert/tracing/default.asp](http://www.asp101.com/articles/robert/tracing/default.asp "The Basics of .NET Tracing")  
      
    
-   Log Parser 2.2 官方網站  
    [http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1287](http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1287 "Log Parser 2.2 官方網站")
