ASP.NET İle MemoryCache Kullanımı | C#

Merhaba,

WebRapor projesinde, sayfalarda tüm özelliklere ait filtrelerin yer alması gerekiyordu. Ancak, bu filtreleri her kullanıcı isteğinde sıfırdan veritabanından çekmek, hem sunucu yükünü artırıyor hem de performansı ciddi şekilde düşürüyordu.

Aklıma ilk olarak Redis gibi dağıtık önbellek çözümleri geldi; fakat projenin mevcut altyapısı ve ihtiyaçları doğrultusunda daha hafif bir çözüm olan MemoryCache’i kullanmaya karar verdim. Üstelik, her bir combo’nun yalnızca tıklandığında dolacak şekilde dinamik bir yapı kurguladım. Bu sayede, önyüzdeki kullanıcı deneyimini hızlandırırken, sunucu tarafında da gözle görülür bir performans artışı oldu.

Kullandığım kod bloğu:

    
public SatisFilterData FiltreleriOnBellektenGetir()
{
    string cacheKeyFiltre = Sabitler.SATIS_FILTRE_CACHE + this.GecerliKullanici.Id.ToString();
    MemoryCache memoryCache = MemoryCache.Default;
    SatisFilterData filterData = memoryCache.Get(cacheKeyFiltre) as SatisFilterData;

    if (filterData == null)
    {
        List lstParams = this.GetirTumParametreler();
        filterData = new SatisFilterData()
        {
            FirmaListesi = this.GetirFirmalar(Sabitler.PARAM_FIRMALAR),
            MusteriListesi = getComboListByParam(lstParams, Sabitler.PARAM_MUSTERILER),
            TedarikciListesi = getComboListByParam(lstParams, Sabitler.PARAM_TEDARIKCILER),
            TemsilciListesi = getComboListByParam(lstParams, Sabitler.PARAM_TEMSILCILER),
            OzellikBirListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKBIR),
            OzellikIkiListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKIKI),
            OzellikUcListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKUC),
            OzellikDortListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKDORT),
            OzellikBesListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKBES),
            OzellikAltiListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKALTI),
            OzellikYediListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKYEDI),
            OzellikSekizListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKSEKIZ),
            OzellikDokuzListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKDOKUZ),
            OzellikOnListesi = getComboListByParam(lstParams, Sabitler.PARAM_OZELLIKON)
        };

        CacheItemPolicy cachePolicy = new CacheItemPolicy
        {
            SlidingExpiration = TimeSpan.FromMinutes(30),
            AbsoluteExpiration = DateTimeOffset.MaxValue,
            Priority = CacheItemPriority.Default,
            RemovedCallback = new CacheEntryRemovedCallback((arguments) =>
            {
                System.Diagnostics.Debug.WriteLine($"Cache removed: {arguments.CacheItem.Key}, Reason: {arguments.RemovedReason}");
            })
        };

        memoryCache.Set(cacheKeyFiltre, filterData, cachePolicy);
    }            
    return filterData;
}
    
  

Selamlar.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top