MVC, System.Text.Json kullanırken IAsyncEnumerable türlerini arabelleğe almaz
ASP.NET Core 5'te MVC, diziyi bellekte arabelleğe alarak ve arabelleğe alınan koleksiyonu biçimlendirerek çıkış biçimlendirme IAsyncEnumerable<T> türleri için destek ekledi. ASP.NET Core 6'da, kullanarak System.Text.Jsonbiçimlendirme yapılırken MVC artık örnekleri arabelleğe almaz IAsyncEnumerable<T> . Bunun yerine MVC, bu türler için eklenen desteğe System.Text.Json dayanır.
Çoğu durumda, arabelleğe alma olmaması uygulama tarafından gözlemlenemez. Ancak, bazı senaryolar yanlışlıkla doğru seri hale getirmek için arabelleğe alma semantiğine bağlı olabilir. Örneğin, bir Entity Framework sorgusu tarafından desteklenen bir değerin yavaş yüklenen özelliklere sahip bir türe döndürülmesi IAsyncEnumerable<T> , sağlayıcı tarafından desteklenmeyen eşzamanlı sorgu yürütmeye neden olabilir.
Bu değişiklik, Newtonsoft.Json veya XML tabanlı biçimlendiriciler kullanılarak yapılan çıktı biçimlendirmesini etkilemez.
Sürüm kullanıma sunulmuştur
ASP.NET Core 6.0
Eski davranış
IAsyncEnumerable<T> kullanılarak biçimlendirilecek ObjectResultJsonResult bir değer olarak MVC eyleminden döndürülen örnekler zaman uyumlu koleksiyon olarak seri hale getirilmeden önce arabelleğe alınır.
Yeni davranış
kullanarak System.Text.Jsonbiçimlendirme yaparken MVC artık örnekleri arabelleğe almaz IAsyncEnumerable<T> .
Değişiklik nedeni
System.Text.Json akış IAsyncEnumerable<T> türleri için destek eklendi. Bu, serileştirme sırasında daha küçük bir bellek ayak izi sağlar.
Önerilen eylem
Uygulamanız arabelleğe almayı gerektiriyorsa nesneyi el ile arabelleğe almayı IAsyncEnumerable<T> göz önünde bulundurun:
// Before
public IActionResult Get()
{
return Ok(dbContext.Blogs);
}
// After
public async Task<IActionResult> Get()
{
return Ok(await dbContext.Blogs.ToListAsync());
}
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin