Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Merhaba,

Bu içeriğimizde, Asp.NET Core Web API uygulamalarının performansını değerlendirmek için gerekli profili oluşturmamızı sağlayan Mini Profiler arayüzü üzerine konuşuyor olacağız.

Başlarken

MiniProfiler’ı kullanabilmek için öncelik olarak hali hazır bir Asp.NET Core Web API projesine MiniProfiler.AspNetCore.Mvc ve MiniProfiler.EntityFrameworkCore kütüphanelerini yüklemeniz gerekmektedir.

dotnet add package MiniProfiler.AspNetCore.Mvc --version 4.1.0
dotnet add package MiniProfiler.EntityFrameworkCore --version 4.1.0

Uygulamaya Entegre Edilmesi

Uygulamaya MiniProfiler kütüphanelerini yükledikten sonra entegrasyon işlemleri için ‘Startup.cs’ dosyasında aşağıdaki gibi gerekli konfigürasyonlar gerçekleştirilmelidir.

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMemoryCache();

            services.AddMiniProfiler(options =>
            {
                //Buradaki tüm konfigürasyonlar isteğe bağlıdır.
                //Boş bıraktığınız taktirde varsayılan değerler söz konusu olacaktır.
                options.RouteBasePath = "/profiler";

                //60 dakikada bir depolama kontrol edilecektir.
                //Varsayılan değeri 30 dakikadır.
                (options.Storage as MemoryCacheStorage).CacheDuration = TimeSpan.FromMinutes(60);

                //SQL formatlayıcısı kontrol edilmektedir.
                //Varsayılan olarak InlineFormatter'dir.
                options.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();

                //Bağlantı açma ve kapatmayı izlemeyi devre dışı bırakabilirsiniz.
                //Varsayılan olarak izlenmektedir.(true)
                options.TrackConnectionOpenClose = true;
            }).AddEntityFramework(); ;
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
                app.UseDeveloperExceptionPage();

            //MiniProfiler ara katmanını ekliyoruz.
            app.UseMiniProfiler();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

5. satırda belirtilen ‘AddMemoryCache’ ile uygulamaya in-memory cache eklenmektedir. MiniProfiler için bu modül zaruridir. Aksi taktirde uygulama runtime’da aşağıdaki olası hatayı verecektir.

Some services are not able to be constructed (Error while validating the service descriptor ‘ServiceType: Microsoft.Extensions.Options.IConfigureOptions`1
[StackExchange.Profiling.MiniProfilerOptions] Lifetime: Singleton ImplementationType: Microsoft.Extensions.DependencyInjection.MiniProfilerOptionsDefaults’: Unable to resolve service for type ‘Microsoft.Extensions.Caching.Memory.IMemoryCache’ while attempting to activate ‘Microsoft.Extensions.DependencyInjection.MiniProfilerOptionsDefaults’.)’

Olası hatanın görsel hali;
Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Bu işlemler neticesinde MiniProfiler entegrasyonu tamamlanmıştır. Artık 11. satırdaki “RouteBasePath” propertyesine verilen ‘/profiler’ değerinin uzantısı olarak; uygulamaya yapılan tüm isteklerin listesine ‘/profiler/results-index’ adresinden, geçerli olan son isteğe ise ‘/profiler/results’ adresinden erişilebilmektedir. Ve tüm bu yapılan istekler ‘/profiler/results-list’ adresinden json olarak elde edilebilmektedir.

İnceleme

Şimdi gelin çalışan bir uygulamada MiniProfiler’ı test edelim.

Yapılan tüm istekleri görmek için ‘https://localhost:5001/profiler/results-index’ adresini inceleyelim.
Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Yapılan istekleri hususi olarak inceleyelim;
Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Görüldüğü üzere MiniProfiler, yapılan istek neticesinde isteğin gönderildiği endpoint’ten tutun arkada üretilen SQL sorgusuna kadar tüm çıktıları görebilmenize ve böylece istek sürecinde zamanın nerede harcandığını daha detaylı kavrayarak, varsa sorunları ayıklamanıza ve performansı doğru bir şekilde optimize etmenize yardımcı olmaktadır.

Özel Kod Profili Oluşturma

MiniProfiler, tarafımızca özelleştirilmiş kod profili oluşturmaya da imkan tanımaktadır. Bunun için aşağıdaki örnek kodu inceleyiniz;

    [ApiController]
    [Route("api/[controller]")]
    public class EmployeeController : ControllerBase
    {
        readonly NorthwindContext _northwindContext;
        public EmployeeController(NorthwindContext northwindContext)
        {
            _northwindContext = northwindContext;
        }
        [HttpPut()]
        public async Task<IActionResult> Put(Employee employee)
        {
            using (MiniProfiler.Current.Step("Güncelleme Metodu"))
            {
                bool hasData = false;
                using (MiniProfiler.Current.Step("Güncellenecek personel kontrol ediliyor."))
                {
                    hasData = await _northwindContext.Employees.AnyAsync(_ => _.Id == employee.Id);
                    if (hasData)
                        using (MiniProfiler.Current.Step("Personel güncelleniyor."))
                        {
                            _northwindContext.Entry(employee).State = EntityState.Modified;
                            await _northwindContext.SaveChangesAsync();
                        }
                }
            }

            return NoContent();
        }
    }

Geliştirdiğimiz bu custom kod profilini ayağa kaldırıp istek gönderdiğimizde
Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı
görüldüğü üzere mevcut yapıdaki tüm yapılanmanın detayını görmemizi sağlamakta ve olası sorunları hızlıca belirleyip, gidermemize imkan tanımaktadır.

Asp.NET Core MVC Uygulamalarına Özel TagHelper

MiniProfiler, Asp.NET Core uygulamalarına özel bir TagHelper ile pratik bir şekilde kullanılabilmektedir.
@addTagHelper *, MiniProfiler.AspNetCore.Mvc
Komutunun ardından layout dosyasında aşağıdaki TagHelper’ı kullanmanız yeterlidir.

<mini-profiler />

Asp.NET Core Web API Uygulamalarında MiniProfiler Kullanımı

Nihai olarak; MiniProfiler, Asp.NET Core web uygulamalarını profillememize yardımcı olan güzel ve kullanışlı bir kütüphanedir. MSSQL yanında birçok farklı veritabanı providerını desteklemekte ve ihtiyacınıza göre özelleştirilebilmektedir.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Not : Örnek uygulamayı indirmek için buraya tıklayınız.

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir