MiniProfiler to świetne narzędzie do debugowania działania aplikacji w MVC. Po bardzo łatwym i szybkim skonfigurowaniu pozwala na pokazanie co dzieje w bebechach naszej aplikacji, prezentując je w dość przystępnej formie jak poniżej:

http://miniprofiler.com/
nHibernate to fajny ORM, który zrzuca z nas obowiązek uciążliwego pisania zapytań SQL.
Jak widać na załączonym powyżej obrazku, MiniProfiler ma możliwość pokazywania także zapytań SQL, które się wykonują podczas działania naszego kodu. Niestety, ale dla nHibernate’a nie działa to z automatu oraz nie ma przygotowanej odpowiedniej paczki NuGet’a (u mnie ta –  MiniProfilerContrib.NHibernate – nie zadziałała). Niestety.

Choć istnieje dobry profiler dla nH – nHibernate Profiler, to jego cena, jak na polskie warunki jest dość wysoka. Dla porządku podam, że istnieje jeszcze opcja kupna licencji na miesiąc co już przekłada się na znośniejsze ceny, ale zobaczmy czy możemy zrobić coś własnymi siłami. 

Temat profilowania aplikacji używających nHibernate’a poruszał już Jarek w swoim wpisie – Zrób to sam – NHibernate Profiler i trochę mnie nim ubiegł :), ale może nie będzie tak źle i uda mi się napisać coś ponad to.

Pokażę, jak wykorzystując logi NHibernate’a dodać pokazywanie zapytań SQL do MiniProfiler’a.
Wystarczy w swoim kodzie dodać klasy, które ładnie zostały zaprezentowane w poniższych Gist’ach:

Ten ostatni powinien niwelować problem, z zapytaniami wsadowymi. Trzeba w nim jeszcze dodać jakiegoś log’a albo usunąć odwołania do niego. Jak już je mamy w naszym projekcie to pozostało bardzo niewiele…

Wystarczy wskazać nHibernete’owi, aby używał naszego napakowanego sterydami sterownika do SQL. Ja we Fluent robię to używając słówka Driver jak poniżej.

.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008.ConnectionString(
 c => c.FromConnectionStringWithKey(“ConnectionString”)).Driver<ProfiledSql2008ClientDriver>())

I gotowe…możemy cieszyć swe oczy zapytaniami do bazy robionymi przez nHibernete’a w MiniProfilderze. Yupi!

Rozwiązanie nie jest 100% działające – są przypadki, że gdzie nie gdzie poleci wyjątek. Nie daje to też takich możliwości jak wspomniany na początku profiler. Mamy tylko informacje o zapytaniach (treść, parametry i czas trwania) i ich duplikatach. nHibernate Profiler robi trochę więcej (podpowiedzi, optymalizacje, wskazuje kod, gdzie dane zapytanie jest odpalane) ale jak na moje potrzeby analizowania i wykrywania duplikatów zapytań SQL jest w zupełności wystarczające.

Miłego profilowania aplikacji!


dotnetomaniak.plNajciekawsze artykuły o .NET