Entity Framework ve AsNoTracking Performansı
Entity Framework, uygulamalarınızın performansını optimize etmenize yardımcı olmak için bir dizi performans ayarlama seçeneği sunar. Bu ayar seçeneklerinden biri
.AsNoTracking(). Bu optimizasyon, Entity Framework'e bir sorgunun sonuçlarını izlememesini söylemenizi sağlar. Bu, Entity Framework'ün sorgu tarafından döndürülen varlıkların ek işlemesini veya depolamasını gerçekleştirmediği anlamına gelir. Ancak aynı zamanda bu varlıkları izleme grafiğine yeniden eklemeden güncelleyemeyeceğiniz anlamına gelir.
Özetle,
.AsNoTracking()yalnızca veri okumak için kullanmak istediğiniz herhangi bir Entity Framework sorgusunda kullanmalısınız. Bu, bu durumlarda minimum bellek kullanımı ve optimum performans sağlayacaktır.
AsNoTracking Performansı
Gördüğünüz gibi AsNoTracking hem yürütme süresinden hem de bellek kullanımından tasarruf edebilir. AsNoTracking'in avantajları, almakta olduğunuz öğe sayısına bağlıdır, bu nedenle bu seçeneğin uygulanması çok sayıda öğe alınırken gerçekten önemli hale gelir.
Bunu özellikle değerli bulduğum bir örnek, bir bellek önbelleği için büyük bir tablo önceden getirmektir.
AsNoTracking nasıl kullanılır?
AsNoTracking'in uygulamanızda kullanımı çok kolaydır, şunları yapın:
System.Data.Entity kullandığınızdan emin olun.
using System.Data.Entity;
Sorgunuza AsNoTracking ekleyin
var items = Context.MyEntityCollection.AsNoTracking().Where(e => e.MyFlag);
AsNoTracking ne zaman kullanılır?
Gördüğünüz gibi AsNoTracking kullanarak, özellikle Entity Framework Snapshot tracker'ı kullanırken önemli performans kazanımları var. Proxy izleyici kullanıyorsanız performans kazançları daha küçüktür.
Bu, veritabanına geri kaydetmek istemediğiniz varlıklar (SaveChanges yapamazsınız) için tüm sorgularda bu ayarlama seçeneğini kullanmanız gerektiği anlamına gelir. Bir CQRS anlamda, bellek ve işleme ayak izinizi azaltmak için muhtemelen bu seçeneği okuma yolunuz boyunca global olarak uygulamalısınız. Ancak, varlığı güncellemek istediğinizde bu ayarlama seçeneğini kullanmamanız önemlidir, çünkü bu, Entity Framework'ün değişikliklerinizi veritabanına geri kaydetmesi gerektiğini bilmesinin bir yolu olmadığı anlamına gelir.
Kaynak: https://blog.staticvoid.co.nz/2012/entity_framework_and_asnotracking/