[英]How can I find how many database calls Entity Framework is making per incoming request?
我正在運行一個使用 Entity Framework 4.0 進行數據庫交互的 C# 4.0 網站。 我想找到導致 Entity Framework 對數據庫進行最多調用的頁面(因為調用越多,頁面可能越慢)。
我會在 Entity Framework 中添加某種工具,讓實際用戶操作網站一段時間,然后分析某種日志以找出哪些頁面對數據庫的調用最多。
是否有某種性能計數器或其他事件可以檢查以確定實體框架何時進行了數據庫調用?
只需開始使用服務器端 sql-tracing。 您可以准確地看到 sql 服務器正在處理什么,而不會增加客戶端的開銷。
這里有更多信息: http://msdn.microsoft.com/en-us/library/ms187929.aspx
你可以試試Entity Framework Profiler (它自己的網站在這里),雖然這不是免費產品,但它有 30 天的免費試用期。 它是由周圍最聰明的人之一寫的
但是,它會標記問題,例如 Select N+1 問題,並警告您不良做法。
從簡介:
Entity Framework Profiler 是一個實時可視化調試器,允許開發團隊獲得有價值的洞察力和視角來了解他們對 Entity Framework 的使用。 該產品的架構來自 OR/M 社區中許多頂級行業領導者的意見。 警報以簡潔的代碼審查方式呈現,指示應用程序的誤用模式。 為了簡化您糾正誤用的工作,我們提供了觸發警報的有問題的代碼部分的鏈接
再次來自簡介(回應評論):
使用 Entity Framework Profiler 很容易。 首先,我們需要讓我們分析的應用程序知道分析器。 然后,只需啟動分析器。
准備要分析的應用程序
添加對 HibernatingRhinos.Profiler.Appender.dll 程序集的引用,該程序集位於可下載的 zip 中。 在應用程序啟動中(web 應用程序中的 Application_Start,Windows / 控制台應用程序中的 Program.Main,或 WPF 應用程序的 App 構造函數),進行以下調用:
HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();
編輯
似乎您可以初始化分析器以進行離線分析。 使用它來初始化它(從這里):
HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.InitializeOfflineProfiling(filename);
然后將生成的文件加載到分析器中。
這似乎應該給你你想要的。
你最好的選擇是一個分析器,要計算 SQL 調用,你只能使用內置的 SQL 分析器(不包括在 Z9778840A0100CB30C9828 Express 雖然76741B0B5A2Z 中)。
對於 EF6,您可以使用context.Database.Log
https://msdn.microsoft.com/en-us/library/dn469464(v=vs.113).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.