ASP Genel VMware

ASP.NET Core ile Performans Optimizasyonu Teknikleri

ASP.NET Core ile Performans Optimizasyonu Teknikleri

ASP.NET Core ile Performans Optimizasyonu Teknikleri

ASP.NET Core, yüksek performanslı web uygulamaları geliştirmek için kullanılan popüler bir framework’tür. Ancak, uygulamanızın verimli çalışmasını sağlamak için çeşitli performans optimizasyon tekniklerini uygulamanız gerekmektedir. Bu makalede, ASP.NET Core ile performans optimizasyonu yaparken dikkate almanız gereken önemli teknikleri inceleyeceğiz.

1. Caching (Önbellekleme) Stratejileri

Önbellekleme, web uygulamalarının performansını artırmak için kullanılan en etkili yöntemlerden biridir. ASP.NET Core, çeşitli önbellekleme stratejilerini destekler:

1.1. MemoryCache Kullanımı

MemoryCache, uygulama içinde sık kullanılan verilerin bellekte saklanmasını sağlar. Bu sayede veriye hızlı erişim mümkün olur.

using Microsoft.Extensions.Caching.Memory;

public class MyService
{
    private readonly IMemoryCache _cache;

    public MyService(IMemoryCache cache)
    {
        _cache = cache;
    }

    public string GetCachedData(string key)
    {
        if (!_cache.TryGetValue(key, out string data))
        {
            data = "Cache'de olmayan veri";
            _cache.Set(key, data, TimeSpan.FromMinutes(5));
        }
        return data;
    }
}

Bu kod, bir anahtar ile önbelleğe veri ekler ve 5 dakika boyunca saklar.

1.2. Distributed Cache Kullanımı

Distributed Cache, verilerin birden fazla sunucu arasında paylaşılmasını sağlar. Redis veya SQL Server gibi altyapılarla kullanılabilir.

using Microsoft.Extensions.Caching.Distributed;

public class DistributedCacheService
{
    private readonly IDistributedCache _distributedCache;

    public DistributedCacheService(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    public async Task SetCacheAsync(string key, string value)
    {
        await _distributedCache.SetStringAsync(key, value);
    }

    public async Task GetCacheAsync(string key)
    {
        return await _distributedCache.GetStringAsync(key);
    }
}

Bu kod, Redis gibi bir dağıtık önbellek sistemi kullanarak verileri saklar ve okur.

2. Asenkron Programlama

ASP.NET Core uygulamalarında asenkron programlama, uygulamanın yanıt verme süresini iyileştirmek için kritik öneme sahiptir. Asenkron işlemler, I/O işlemlerini daha verimli hale getirir.

2.1. Async/Await Kullanımı

Asenkron programlama, async ve await anahtar kelimeleri ile kolayca uygulanabilir.

public async Task GetDataAsync()
{
    var data = await FetchDataFromDatabaseAsync();
    return Ok(data);
}

private async Task FetchDataFromDatabaseAsync()
{
    // Veritabanı çağrısı
    await Task.Delay(1000); // Örnek gecikme
    return "Veritabanından gelen veri";
}

Bu örnek, veritabanından veri alırken asenkron bir çağrı yapar ve UI’nin kilitlenmesini önler.

3. Bağlantı Havuzlama

Veritabanı bağlantıları, web uygulamalarının performansını etkileyen önemli bir faktördür. Bağlantı havuzlama, veritabanı bağlantılarının daha verimli kullanılmasını sağlar.

3.1. Connection Pooling

Bağlantı havuzlama, veritabanı bağlantılarının yeniden kullanılmasını ve yeni bağlantıların hızlı bir şekilde oluşturulmasını sağlar.

public class DatabaseService
{
    private readonly string _connectionString;

    public DatabaseService(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DefaultConnection");
    }

    public void UseDatabase()
    {
        using (var connection = new SqlConnection(_connectionString))
        {
            connection.Open();
            // Veritabanı işlemleri
        }
    }
}

Bu kod, veritabanı bağlantı havuzlamasını etkinleştirir ve bağlantıların yeniden kullanılmasını sağlar.

4. Minification ve Bundling

Statik dosyaların küçültülmesi ve birleştirilmesi, sayfa yükleme sürelerini önemli ölçüde azaltabilir.

4.1. CSS ve JavaScript Minification

ASP.NET Core, CSS ve JavaScript dosyalarının küçültülmesi için araçlar sunar.

// Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=600");
        }
    });

    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

Bu ayar, statik dosyaların tarayıcı tarafından önbelleğe alınmasını ve küçültülmesini sağlar.

5. Sunucu Tarafı Optimizasyonları

Sunucu tarafında yapılacak optimizasyonlar, uygulamanın genel performansını artırabilir.

5.1. Kestrel Sunucu Ayarları

Kestrel, ASP.NET Core uygulamaları için varsayılan web sunucusudur ve performans için optimize edilebilir.

// Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseKestrel(options =>
            {
                options.Limits.MaxConcurrentConnections = 100;
                options.Limits.MaxRequestBodySize = 10 * 1024;
            });
            webBuilder.UseStartup();
        });

Bu ayarlar, Kestrel sunucusunun eşzamanlı bağlantı ve istek boyutu sınırlarını yapılandırır.

6. Veri Sıkıştırma

Veri sıkıştırma, uygulamanızın bant genişliği kullanımını azaltır ve sayfa yükleme sürelerini iyileştirir.

6.1. Gzip Sıkıştırma

ASP.NET Core, Gzip sıkıştırmayı etkinleştirerek yanıt boyutunu küçültmenizi sağlar.

// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.EnableForHttps = true;
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseResponseCompression();
    // Diğer middleware'ler
}

Bu ayar, HTTPS üzerinden gönderilen yanıtların Gzip ile sıkıştırılmasını sağlar.

7. Veri Tabanı Optimizasyonları

Veritabanı sorgularının optimizasyonu, uygulamanızın performansını doğrudan etkiler.

7.1. Sorgu Optimizasyonu

Veritabanı sorgularınızı optimize ederek, uygulamanızın performansını artırabilirsiniz.

public async Task<List> GetProductsAsync()
{
    using (var context = new MyDbContext())
    {
        return await context.Products
            .Where(p => p.IsActive)
            .OrderBy(p => p.Name)
            .ToListAsync();
    }
}

Bu kod, veritabanından sadece aktif ürünleri getirir ve performansı artırmak için sıralama uygular.

ASP.NET Core uygulamalarınızda bu optimizasyon tekniklerini uygulayarak, kullanıcı deneyimini önemli ölçüde iyileştirebilirsiniz. Performans iyileştirmeleri, kullanıcı memnuniyetini artırır ve sunucu kaynaklarının daha verimli kullanılmasını sağlar. Eğer uygulamanızın performansını artırmak için daha fazla kaynağa ihtiyaç duyuyorsanız, Cloud Sunucular veya VDS Sunucular gibi çözümleri değerlendirebilirsiniz.