2011-12-16 27 views
2

我正在尋找一些方法來監視系統中的每個頁面的Page_Load中工作,如何請求和數據的末尾之間的長被送回對用戶來說是。ASP.NET監視的Page_Load性能(無需更改代碼)

我要做到這100%的服務器端,我不想做任何代碼更改應用程序代碼。如果需要更改應用程序代碼,是否有標準的地方來製作這些代碼?我在想某種web.config類型的參數,將信息記錄到位置/數據庫。我們可以做處理部分,只需要原始數據。

我會尋找收集的信息是:

  1. 頁名(包括查詢字符串)
  2. 請求的日期時間
  3. 花費的時間
  4. 任何附加信息的數量關於我們可以得到我們的請求!

很顯然,先決條件是它不應該影響性能。

我也在尋找任何東西成本低,或者說我們可以開發我們的系統的方法。

附加信息: 更清晰,我們有IIS和底層操作系統的完全控制,不過,該網站的應用程序是我們無法控制的。我們可以更改配置文件,但不是應用程序的實際代碼。

但是,如果現在使用IIS 6.0,如果這種事情效率更高,並且/或者開箱即用,使用IIS 7.0/7.5,那麼它可能會加速移動到如此高興聽到關於這些建議。

+0

您運行的是哪個版本的IIS? IIS 7具有內置的功能。 – 2011-12-16 17:12:43

+0

6.0目前,我們正在考慮升級到7.5,所以信息7的功能將會很有用(雖然不被認爲是這個問題的答案,對不起)。 – Martin 2011-12-16 18:48:21

+0

@JohnSaunders你能指出IIS7頁面統計信息的位置嗎?我找不到任何這樣的東西(在IIS 7.5中,Windows Server 2008 R2) – 2013-09-16 18:27:32

回答

3

這不是一個WebForms問題,它是一個ASP.net的問題。使用global.asaxIHttpModule鉤入BeginRequest/EndRequest事件來跟蹤請求需要多長時間。

StopWatchModule.cs

class StopWatchModule: IHttpModule 
{ 
    private Int64 _requestStartTicks; 

    public void Init(HttpApplication application) 
    { 
     application.Context.BeginRequest += Application_BeginRequest; 
     application.Context.EndRequest += Application_EndRequest; 
    } 

    private void Application_BeginRequest(object sender, EventArgs e) 
    { 
     _requestStartTicks = Stopwatch.GetTimestamp(); 
    } 

    private void Application_EndRequest(object sender, EventArgs e) 
    { 
     Int64 requestStopTicks = Stopwatch.GetTimestamp(); 

     Double requestDurationMs = (Double)(requestStopTicks - _requestStartTicks)/Stopwatch.Frequency/1000000f; 
     /* 
      Sample output: 
      Request for "~/EditCustomer.aspx" took 37 ms to complete 
     */ 
     HttpContext context = ((HttpApplication)sender).Context; 
     Logger.Info("Request for \"{0}\" to {1} ms to complete", 
       context.Request.AppRelativeCurrentExecutionFilePath, 
       requestDurationMs.ToString("r", CultureInfo.InvariantCulture)); 
    } 
} 

網絡。配置

<configuration> 
    <system.web> 
     <httpModules> 
      <add name="StopWatchModule" type="StopWatchModule" /> 
     </httpModules> 
    </system.web> 
</configuration> 

我從內存中寫了這麼有可能是上面的錯誤,但是這是想法。您的日誌消息可以儘可能詳細。 Logger是某種類型的日誌庫。我更喜歡log4net,但選擇是你的。

1

你能觸摸global.asax嗎?您可以覆蓋應用程序事件時有接收到一個請求,完成,失敗等

根據你需要,你也可以嘗試解析IIS日誌,因爲你可以添加一些性能指標,那什麼都。

0

您可以隨時啓用你的web.config跟蹤,與選項pageOutput =「假」。

然後,您可以轉至trace.axd查看特定請求的信息。

您也可以通過在@ Page指令設置它做這個特定頁面。

0

我正在尋找一些方法來監視系統中的每個 頁的Page_Load中工作,如何請求和數據的 端之間長期被髮回給用戶。

我不知道IIS日誌的時間,採取現場可任意使用的,因爲它會爲你提供時間,IP,字節(發送/接收)等

更多的信息,請參閱fields