Как узнать, сколько вызовов базы данных выполняет Entity Framework на каждый входящий запрос? - PullRequest
6 голосов
/ 07 июня 2011

Я работаю на веб-сайте C # 4.0, который использует Entity Framework 4.0 для взаимодействия с базой данных.Я хочу найти страницы, которые заставляют Entity Framework совершать большинство вызовов в базу данных (поскольку чем больше вызовов, тем медленнее будет страница).

Я бы добавил какие-то инструменты дляEntity Framework, пусть реальные пользователи некоторое время управляют сайтом, а затем анализируют какой-то журнал, чтобы выяснить, какие страницы вызвали наибольшее количество обращений к базе данных.

Существует ли какой-то счетчик производительности или другое событие, которое можетбыть проверенным, чтобы выяснить, когда Entity Framework сделал вызов базы данных?

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

вы можете попробовать Entity Framework Profiler (его собственный сайт здесь ), хотя это не бесплатный продукт, однако, он имеет 30-дневную бесплатную пробную версию.И он написан одним из самых умных парней из

Однако он будет отмечать проблемы, такие как проблемы Select N + 1, и предупреждать вас о плохой практике.

Отреклама:

Entity Framework Profiler - это визуальный отладчик в режиме реального времени, позволяющий команде разработчиков получить ценные сведения и ознакомиться с использованием Entity Framework.Продукт спроектирован при участии многих ведущих отраслевых лидеров сообщества OR / M.Оповещения представляются в краткой форме с проверкой кода с указанием закономерностей неправильного использования вашим приложением.Чтобы упростить ваши усилия по исправлению неправильного использования, мы предоставляем ссылки на раздел проблемного кода, который снова вызвал предупреждение

из сообщения (в ответ на комментарий):

Использование Entity Framework Profiler легко.Во-первых, нам нужно сообщить приложению, которое мы профилируем, о профилировщике.Затем просто запустите профилировщик.

Подготовка приложения для профилирования

Добавьте ссылку на сборку HibernatingRhinos.Profiler.Appender.dll, расположенную в загружаемом zip-архиве.При запуске приложения (Application_Start в веб-приложениях, Program.Main в Windows / консольных приложениях или конструктор приложений для приложений WPF) выполните следующий вызов:

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();

EDIT

кажется, что вы можете инициализировать профилировщик для автономного профилирования.используйте его для инициализации (вместо здесь ):

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.InitializeOfflineProfiling(filename);

, затем загрузите полученный файл в профилировщик.

Похоже, он должен дать вам то, что выхочу.

2 голосов
/ 07 июня 2011

Просто начните использовать sql-трассировку на стороне сервера.Вы можете точно увидеть, через что работает сервер sql, не добавляя накладных расходов клиенту.

Вот дополнительная информация: http://msdn.microsoft.com/en-us/library/ms187929.aspx

1 голос
/ 07 июня 2011

Лучше всего вам использовать профилировщик, для подсчета вызовов SQL только вы можете просто использовать встроенный профилировщик SQL (хотя и не входит в SQL Express).

0 голосов
/ 09 ноября 2016

Для EF6 вы можете использовать context.Database.Log

https://msdn.microsoft.com/en-us/library/dn469464(v=vs.113).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...