2010-05-10 21 views
7

üzerinde o benim kodunda şu noktaya alır her üzerine OutOfMemoryExceptions atıyor bir web sitesi var Bunun neden olduğuna dair bir ton bilgim yok. Serileştirdiği nesnelerin çok ciddi bir şey olmadığını biliyorum - her biri bir MB'dan daha az..NET OutOfMemoryException XMLSerializer.Serialize

Bunu daha önce yaptınız mı? Sorunu teşhis etmeme yardımcı olmaktan hoşlanıyor musunuz? Herhangi bir yardım takdir edilir.

Teşekkürler!

cevap

9

OutOfMemoryException, serileştirilen nesnelerden kaynaklanmaz, bunun yerine XmlSerializer nesnelerinin oluşturulmasının bir sonucudur. Bir XmlSerializer oluşturulduğunda, bir derleme dinamik olarak oluşturulur ve AppDomain'e yüklenir. Bu derlemeler, AppDomain öğesinin kaldırılıncaya kadar çöp toplanamaz, bu durumda da asla. Kullanılan XmlSerializer yapıcısına bağlı olarak, oluşturulan her bir XmlSerializer dinamik olarak yeni bir derleme üretecektir. Zamanla, bu meclisler tüm mevcut hafızayı tüketir.

  1. Önbellek oluşturup XmlSerializer:

    çözümleri bir çift vardır.

  2. Önbelleğe almayı uygulayan XmlSerializer yapıcısı aşırı yüklerinden birini kullanın. Önbelleğe almayı uygulamayan XmlSerializer (Tür, XmlAttributeOverrides) kullandığınız anlaşılıyor. XmlSerializer (Type) ve XmlSerializer (Type, string) önbelleğe almayı uygular. Ben kullanıyorum iken

Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET

+0

Merhaba, benzer sorunla karşı karşıya olan "Yeni XmlSerializer (o.GetType());". Bu soruna yerel makinemde serileştirilmiş çok büyük verilerle bakıyorum, bir bulut sunucusunda barındırılan canlı uygulamada herhangi bir istisna vermiyor. Ancak, seri hale getirilmiş dizeyi geliştirme sırasında daha fazla kullanamıyorum ve test edemiyorum. Önerilere açığım. –

0

XmlSerializer, benzer sorunlardan bir süre sonra geri çağırırsa, verileri işlemeden daha fazla bir bellek miktarına ihtiyaç duyar. Bunun neden böyle olduğundan emin değilim.