SORU
1 EKİM 2009, PERŞEMBE


Kullanmaya ne zaman karar XmlDocument vs XmlReader

Özel bir nesne - ^ optimize ediyorum . Seri hale getirme programı XML ve hepsi bitti ve çalışıyor ve bu büyük bir sorun değil.

XmlDocument bir nesnenin içine bir dosya yükleme ile, ardışık tüm alt düğümleri ile devam etti.

Belki de XmlReader yerine XmlDocument yükleme/tüm şey ayrıştırma sahip bu sürüm de ben hayata çok daha hızlı olacağını düşündüm.

Algoritmalar tamamen aynı, XmlNode vs bir XmlReader ile ilgili Özet için kapsayıcı bir sınıf işlevi kullanıyorum. Örneğin, GetChildren yöntemler verimi çocuk XmlNode veya bir Ağacı XmlReader da verir.

Test sürücüsü her iki sürümü de test etmek için, ve önemsiz olmayan bir veri kümesi (yaklaşık 1,350 elemanları ile 900kb XML dosyası) kullanarak yazdım.

Ancak, Yepyeni bir dotTRACE kullanarak, XmlReader sürümü XmlDocument sürümünden daha yavaş olduğunu görüyorum. Alt düğümler içinde dolaşmak olduğumda bazı önemli işleme XmlReader okuma aramalar dahil olduğu görülmektedir.

Tüm bu sor dedim ki:

Avantajları XmlDocument ve hangi durumlarda gerekir XmlReader ve dezavantajları/ya da nedir?

Benim tahminim olan XmlReader daha az yoğun bellek performansı, hem de daha ekonomik olur boyut bir eşik var. Ancak, bu eşik 1MB yukarıdaki gibi görünüyor.

ReadSubTree her zaman alt düğümleri işlemek için arıyorum:

public override IEnumerable<IXmlSourceProvider> GetChildren ()
{
    XmlReader xr = myXmlSource.ReadSubtree ();
    // skip past the current element
    xr.Read ();

    while (xr.Read ())
    {
        if (xr.NodeType != XmlNodeType.Element) continue;
        yield return new XmlReaderXmlSourceProvider (xr);
    }
}

XML derin ve geniş olduğunda bu test tek bir düzeydeki nesneleri (geniş ve sığ, yani bir çok şey için geçerlidir - ama merak ediyorum ne kadar iyi XmlReader ücretleri? I. e. çocuk nesneleri, vb birçok için, 1 veri nesne modeli üst bir nesne gibi çok uğraştığım XML: 1..M..M..M

Ben de bunun için optimize edemiyorum yani ayrıştırma, ben XML önceden yapısını bilmiyorum.

CEVAP
1 EKİM 2009, PERŞEMBE


Genel olarak baktımhızlı bir bakış açısından değilama bunun yerine birbellek kullanımıbakış açısı. Uygulamaları (tipik kurumsal entegrasyon) onları kullandım kullanım senaryoları için yeterince hızlı.

Aşağı ve bazen olağanüstü düştüm ancak, burada dikkate çalıştığım XML genel boyut alıyor. Eğer bu konuda ön düşünüyorsanız kendinizi biraz keder kaydedebilirsiniz.

XML belleğe yüklendiğinde en az XmlDocument XPathDocument DOM gibi bir okuyucu ile kabartmak eğilimindedir. 10:1 gibi bir şey mi? Miktarını tam olarak ölçmek zordur, ama 1MB bu disk üzerinde örneğin bellek veya daha fazla 10MB olacak.

Bir işlem kullanarak herhangi bir okuyucu yükleyen tüm belgeye hafızasında bütünüyle (XmlDocument/XPathDocument) muzdarip büyük nesne yığın parçalamayı, sonuçta kurşun OutOfMemoryExceptions (bile kullanılabilir bellek) sonucu kullanılamaz hizmet/süreç.

Beri nesneler daha büyük 85K boyutu sonunda büyük nesne yığın, ve sende bir 10:1 boyut patlama ile bir DOM okuyucu, görüyorsun değil mi çekmek daha önce XML belgeleri olarak ayrılan gelen büyük nesne yığın.

XmlDocument kullanımı çok kolaydır. Onun tek gerçek dezavantajı işlemek, belleğe tüm XML belgesi yükler. Kullanmak için onun baştan çıkarıcı basit.

XmlReader dayalı okuyucu çok işlem bellek kullanımı genellikle düz tutar ama kullanmak için daha zor bir akış.

XPathDocument XmlDocument, salt okunur bir sürümü daha hızlı olma eğilimindedir, ama yine de bellek muzdarip''. bloat

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BlackmillMusic

    BlackmillMus

    3 Kasım 2010
  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008