2011-05-03 24 views
1

有沒有一種方法可以捕獲(並最終記錄)每個請求(或工作單元)由EF4執行的查詢總數?每個請求由EF4執行的查詢數量

我發現寫一些低效的EF4代碼很容易,因爲它很容易通過延遲加載進行訪問,並且還由於結構不良的LINQ查詢。

我能夠發現這一點的一個簡單方法是捕獲正在執行的查詢的總數,並將其與我的請求數據一起記錄,以便我可以查看哪些頁面(控制器/操作)是導致查詢數量過多。

有沒有辦法用EF4代碼做到這一點?我知道我可以使用Profiler來做到這一點,而且我現在已經在使用它,但是如果我能夠自動執行此操作,它會更容易 - 也更可靠。

在此先感謝。

回答

2

您必須從EF Tracing provider wrapper開始,並使用一些日誌記錄基礎結構,這將允許您通過請求獲得不同的日誌記錄。您可以使用線程Id,會話Id或其他標識符來區分日誌記錄。例如,使用TraceSource的.NET日誌記錄支持CorrelationManagerStartLogicalOperationStopLogicalOperation方法。我認爲在完成請求處理時,您應該能夠在啓動請求處理和結束邏輯操作時啓動邏輯操作。

+0

謝謝你,你再次來。我已經實現了這一點,並提出了自己的記錄執行計數的機制,並且可以選擇每個請求執行的所有查詢的SQL。這將使初始故障排除和性能調整變得更容易! – 2011-05-04 04:43:29

0

你可能要考慮看​​看這個:EF Profiler。 [注:我與這家公司沒有任何關係,只是覺得它是一個很棒的工具]