در کنار کتابخانه elmah که وظیفه ثبت تمامی خطاهای برنامه را دارد کتابخانه MiniProfiler امکان یافتن مشکلات کارایی و تنگناهای وب سایت را در اختیارمان قرار میدهد. دو قابلیت عمده که این ابزار فراهم مینمایید در ASP.NET MVC در صفحه Layout_ قبل از بسته شدن تگ body تابع RenderIncludes را مانند زیر صدا بزنید تا در همه صفحات نمایش داده شود
در کلاس global کد زیر را برای اجرای MiniProfiler اضافه نمایید
یا کتابخانه MiniProfiler.MVC را از nuget دریافت نمایید
با اضافه شدن این کتابخانه همه پیکربندی بصورت صورت خودکار انجام میگیرد. حال وب سایت را اجرا کنید در بالای صفحه مانند شکل زیر مدت زمان بارگذاری صفحه نمایش داده میشود که با کلیک بر روی آن اطلاعات بیشتری را مشاهده مینمایید
- امکان مشاهده و بررسی کوئریهای خام ADO.NET از قبیل SQL Server,Oracle و LINQ-to-SQL و EF/First Code و...
- نمایش زمان اجرای عملی صفحات
برای استفاده از این ابزار کافیست تا آن را از nuget دریافت نمایید
PM> Install-Package MiniProfiler
@using StackExchange.Profiling;<head> ..</head><body> ... @MiniProfiler.RenderIncludes()</body>
protected void Application_BeginRequest() { if (Request.IsLocal) { MiniProfiler.Start(); } } protected void Application_EndRequest() { MiniProfiler.Stop(); }
برای پیکربندی MiniProfiler در web.config کد زیر را اضافه نمایید
<system.webServer> ...<handlers><add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" /></handlers></system.webServer>
PM> Install-Package MiniProfiler.MVC
اگر در اکشن اجرا شده کوئری اجرا شد باشد ستونی به نام query times نمایش داده میشود که تعداد کوئریها و مدت زمان آن را نمایش میدهد
حال بر روی گزینه sql کلیک کنید که صفحه دیگری باز شود و کوئری خام آن را مشاهد نمایید اگر کوئری تکرار شده باشد در کنار آن با DUPLICATE متمایز شده است
برای مشاهده کوئریهای Entity Framework/First Code کتابخانه MiniProfiler.EF را اضافه نمایید
PM> Install-Package MiniProfiler.EF
اگر بصورت دستی MiniProfiler را پیکربندی کرده باشید میبایست در Application_Start دستور زیر را اجرا نمایید
protected void Application_BeginRequest() { if (Request.IsLocal) { MiniProfiler.Start(); MiniProfilerEF.Initialize(); } }
در حالت پبشرفتهتر اگر قصد داشته باشید زمان یک قطعه کد را جداگانه محاسبه نمایید بصورت زیر عمل نمایید
public ActionResult Index() { var profiler = MiniProfiler.Current; using (profiler.Step("Step 1")) { //code 1 } using (profiler.Step("Step 2")) { //code 2 } return View(); }
با این کار زمان هر step را بصورت جداگانه محاسبه مینماید. در ASP.NET Webforms دقیقا به همین صورت استفاده میشود فقط کافیست در masterpage اصلی یا اگر از masterpage استفاده نمیکنیم در صفحه مورد نظر تابع RenderIncludes را بصورت زیر صدا بزنیم
<%= StackExchange.Profiling.MiniProfiler.RenderIncludes() %>
امیدوارم مفید واقع شده باشد.