folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder .Net Core Ef Core İlk Request Yavaşlık Sorunu



.Net Core Ef Core İlk Request Yavaşlık Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    Merhaba arkadaşlar,

    Bir projede ef core (db first) kullanıyoruz. Proje IIS de host ediliyor ve mssql kullanıyoruz. Projede ilk request süreleri çok uzun. Örneğin ilk defa get ettiğimizde 14sn lerde sonuç dönerken sonraki get de 30ms lere düşüyor. Sorunu çözemedik. Araştırdığımda EF'nin bu sorunu olduğunu okudum ancak 14sn ciddi bir fark.

    Direk ado.net ile denediğimizde ilk request 2.3s lerde cevap dönüyor. EF performansını arttırmamız lazım. Performans için neler yapıyorsunuz? ve ben bu süreyi kabul edilebilir seviyelere nasıl çekebilirim?

    Context içerisinde birtakım ayarları kapattım yinede performansda bir etki göremedik. Async ve sync olarak da testler yaptık gözle görülür bir etkisi olmadı.

     

    public Context()
            {
                this.ChangeTracker.LazyLoadingEnabled = false;
                this.ChangeTracker.AutoDetectChangesEnabled = false;
                this.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
            }

     

    Absolut tarafından 28/Eki/20 20:01 tarihinde düzenlenmiştir

    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    daha önce .net core EF'yi denemedim, onun yerine direk Dapper.net kullandim (mysql ile), performansindan memnunum. ADO.Net ile EF'nin karisimi gibi düsünebilirsin. Bir de generic class olusturup yap, tek tek her tablon icin insert,update,delete,select kodlari yazma.

    Eger kodunuzu güzel yazmissaniz EF den Dapper'a gecmek zor olmaz. 

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    İnsert update select delete örneklerini buraya yazabilir misin


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Mastika.
    Absolut
    Absolut's avatar
    Kayıt Tarihi: 04/Ağustos/2011
    Erkek

    @ontedi Aşağıda ilettiğim şekilde bir repo clasım var tüm classlarım bunu implemente ediyor. İnternette ef warm up olarak bir çok konu mevcut çok şikayetçi var. 

    @unbalanced hocam dapper şuanda tartıştığımız konu geçilecek gibi bu sorunu çözemezsek. ado.net ile performans 5-6 katı fark atıyor ef ye dapperda da aynı performansı alırız diye düşünüyorum.

    Ayrıca code first olarak başka bir proje bu sorunu hiç yaşamıyoruz.

    public class EfEntityRepositoryBase<TEntity, TContext> : IEntityRepository
            where TEntity : class, IEntity, new()
            where TContext : DbContext, new()
        {
            public void Add(TEntity entity)
            {
                using (var context = new TContext())
                {
                    var addedEntity = context.Entry(entity);
                    addedEntity.State = EntityState.Added;
                    context.SaveChanges();
                }
            }
    
            public void Delete(TEntity entity)
            {
                using (var context = new TContext())
                {
                    var deletedEntity = context.Entry(entity);
                    deletedEntity.State = EntityState.Deleted;
                    context.SaveChanges();
                }
            }
    
            public TEntity Get(Expression<Func<TEntity, bool>> filter)
            {
                using (var context = new TContext())
                {
                    return context.Set().SingleOrDefault(filter);
                }
            }
    
            public IList GetList(Expression<Func<TEntity, bool>> filter = null)
            {
                using (var context = new TContext())
                {
                    return filter == null ? context.Set().ToList()
                        : context.Set().Where(filter).ToList();
                }
            }
    
            public void Update(TEntity entity)
            {
                using (var context = new TContext())
                {
                    var updatedEntity = context.Entry(entity);
                    updatedEntity.State = EntityState.Modified;
                    context.SaveChanges();
                }
            }
        }

     

     

     

     

    Absolut tarafından 28/Eki/20 20:57 tarihinde düzenlenmiştir

    Nice babayigitler kirayi kim odeyecek, coluk cocuk ne yiyecek derdinden dolayi dunyayi degistiremiyor.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    sorgularda genel olarak ienumerable yerine, IQueryable kullanmalısın ama senin problemin şuan o değil. benimde mvc projelerimde o tip bir sorun vardı. EF ilk çalışırken tüm databasei okuyup hatim ediyor. sadece ilgili bölümleri okuması için bişeyi true/false yapman gerekiyordu ama hatırlamıyorum :)

    private IQueryable GetAllProperties()
    {
        return _dbContext.Property.AsQueryable();
    }
    

     

    ek olarak bende .net core ef kullanıyorum ve şuan o sorunu yaşamıyorum. bi ihtimal dependency injection şekliden bağlandığımdan olabilir. 

    edit: https://forums.asp.net/t/2158801.aspx?Entity+Framework+Slow+first+query

    layzload kısmına bakmalısın

     

    cemnet tarafından 28/Eki/20 21:04 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ★★★★
    Genki
    Genki's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    konu ile ilgili hiç bir bilgim olmamasına rağmen sorunun sunucu tarafında dns çözümlesinden kaynaklı olabilitesi nedir ?

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    camarade
    ontedi
    ontedi's avatar
    Kayıt Tarihi: 04/Eylül/2005
    Erkek

    Açıkcası ben de bu durumun benzerini sadece bir sayfa için yaşıyordum (4 saniyede açılıyordu).

    - Tablolarda indexi kontrol et

    - Uniqueidentifier benzer soruna neden olabilir.

    - Sayfa bazlı cache kullanman gerekebilir.

    - En son ihtimal veritabanı sunucusu sıkıntılı. 

    Ben başka hostinge geçince düzeldi. Tabii yukarıdaki maddeleri düzelttiğim için mi yoksa sunucu mu iyiydi orasına karar veremedim. Ama gördüğüm kadarıyla sunucu iyi gibi.


    Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    mumkunse projeyi azure app site altında çalıştırır mısın aynı sorunu yapacak mı 

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    2021 Talihlisi
    TheAvenqer
    TheAvenqer's avatar
    Kayıt Tarihi: 09/Şubat/2014
    Erkek

    Sorunun için geçerli çözüm olacak mı bilmiyorum ama c# da mysql de login işleminde ilk login 3 sn civarı sürüyordu sonrakiler anlık yapılıyordu sorun bağlantıdaymış program açılınca bağlantıyı 1 kez açıp kapatınca hafıza alıyor sonraki sorguların süresi anlık olmaya başlıyordu dediğim gibi geçerli çözüm olur mu bilmiyorum ama form işleminde başta 1 kez bağlantıyı aç kapat öyle dene


    Bot ve lisans ihtiyaçlarınız için pm atınız.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    illa EF core kullanacaksaniz söyle aciklamaya yapayim:

    Ado.net in calisma prensibi ile EF core un calisma prensipleri farkli. Ozellikle DB first yaklasiminda microsoft kendisi tüm tablo yapisini "otomatik" olusturuyor. Iste sikintinin da burada oldugunu düsünüyorum. Cünkü otomatik olusturulan seylerde gereksiz cok kod olabiliyor ya da performans düsünülmemis olabiliyor. Bunun en basit örnegi native ve native olmayan mobile app'lerde. Cünkü native olmayan app kodlarini derleyicileri native kodlara dönüstürür ve onlari hic inceledin mi bilmiyorum ama bazen cok absürd durumlar var gereksik cagrilar var vs.

    Diger bir olay ise veritabani iliskileri. NoSql cözümlerinin hizli olmasinin bir sebebi de iliskisel veritabanlari olmamasi, iliski demek ekstre yük demek ve DB-first yaklasminda da EF otomatik olarak bu iliskileri-keyleri tanimliyor ve bunlar da yavas calismasina sebep oluyor.

    Demem o ki; DB first ile hazirlanan class'lari alin, icindeki gereksiz kisimlari atin, sadece tablo yapisi kalsin ve code-first yapisiyla devam edin. Bu sekilde bariz bir performans artisi elde edeceksiniz.

    Üstte söyledigim gibi EF yavas, bunun sebebi de lüks getirmesi, yani ekstra maliyet. Isini kolaylastiriyor ancak beraberinde maliyeti de getiriyor. Ben asp.net core projesinde EF'nin hantalligindan, ado.net'in ugrastirmasindan dolayi dapper'i sectim. MySql icin yapilmis benchmarklari arastirdim ve sonra generic bir kod yapisiyla harika bir sistem olusturdum.

    Illa bu sekil kullanacaksaniz projeye bakmak gerek ama ahim sahim bir performans artisi olacagini düsünmüyorum. Belki bazi arkadaslarin dedigi gibi lazy loading ve IEnumerable-IQueryable kisimlarina dikkat etmek gerekiyor.

    kolay gelsin

    not: performans cok önemliyse gerekli kisimlarda uygun bir NoSql cözümü kullanilabilir.


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    rakkoc
    rakkoc's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo

    bro sorun EF de oldugundan emin misin, benzer bir sorun yaşıyorum ama db bağlantisi bile yok.. bence sorun IIS'in uyku modunda olması. ilk requst'de IIS dll leri load ettiği için sorun çözülüyor.


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
Toplam Hit: 8267 Toplam Mesaj: 41
.net core ef core