2012-02-14 57 views
1

我有一個緩慢加載的ASP.NET頁面(Webforms),從查看源代碼看起來源代碼來自太多往返數據庫的次數。內部循環中的數據庫調用執行的次數大約是8000次,而我們應該要求的數據庫調用次數少一個數量級。診斷ASP.NET中的數據庫調用次數

要驗證我的代碼更改是否具有預期的效果,在呈現單個頁面期間記錄/觀察數據庫調用次數的最直接方法是什麼?

編輯:我們這個項目的開發數據庫目前沒有配置爲允許我運行SQL Server Profiler(「您必須是sysadmin固定服務器角色的成員或具有ALTER TRACE權限」)。我會與DBA談一談,我們是否可以在Dev中爲我們啓用此權限,但與此同時,我對任何不需要系統管理員權限的替代方案感到好奇。

回答

2

使用SQL Server Profiler - 在加載頁面之前開始記錄,在頁面加載完成後停止。

您可以將其配置爲僅記錄特定事件並按照源應用程序,進程ID等內容進行過濾。

比較不同的運行一旦你有一個修復的地方。

另一種方法是在您的webforms應用程序中使用mvc-mini profiler,詳見this answer

+0

我們廣泛使用SQL Server Profiler進行這種類型的分析。偉大的工具 – NotMe 2012-02-14 22:29:15

+0

看到我上面的編輯,但是有沒有辦法在沒有ALTER TRACE權限的情況下運行這個(相當基本的)性能分析步驟? – Ryan 2012-02-15 20:54:47

+0

@瑞恩 - 我不這麼認爲。作爲一種替代方案,看一下小型分析器。 – Oded 2012-02-15 21:02:54

0

Sql Server Profiler是您想要完成這項工作的工具。

0

看看Pex和痣:http://research.microsoft.com/en-us/projects/pex/downloads.aspx。這些是'嘲諷對象',你可以創建一個對象,透明地繞過你的數據庫對象的調用,而不會弄亂你的代碼。然後在該對象內部,您可以放置​​一些日誌代碼。

+0

請解釋Pex和Moles如何幫助解決這個問題?這些測試與他的問題無關的艾滋病。 – Oded 2012-02-14 22:06:02

+0

你可以模擬你正在對數據庫對象進行的調用。他必須調用某種API。我從攔截某些API調用的角度來看它。 – deadlyvices 2012-02-14 22:11:22

+0

這是你的一個假設。代碼隱藏完全有可能直接進行調用(或者沒有代碼隱藏)。 – Oded 2012-02-14 22:16:21

0

Sql Profiler在這裏很不錯。如果你只需要一個SELECT N + 1少的驗證,它就可以完成這項工作。如果您需要更精確的信息,並且您正在使用流行的ORM,則可能需要查看Hibernating Rhinos suite of profilers