2009-03-03 18 views
17

Framework .Net ma teraz (przynajmniej) cztery różne metody odczytu łańcucha Xml. Użyłem każdego z XmlDocument, XmlReader, XPath i XElement, ale który jest najbardziej efektywny w użyciu podczas kodowania lub wykonywania? Czy każdy jest przeznaczony do innego zadania, jakie są plusy i minusy?Najbardziej efektywny sposób analizy Xml


Aktualizacja: Korzystanie z XmlReader wydaje się być najszybszym sposobem odczytu XML, które brzmią rozsądnie mnie, ale ma swoje ograniczenia. Chciałbym wiedzieć, czy istnieje różnica w wydajności między XmlDocument i XLinq dla uzyskania dostępu do xml niesekwencyjnie.


Aktualizacja: znalazłem kilka postów porównania różnych metod ładowania dokumentu XML. XmlReader jest najszybszy, istnieje niewielka różnica między XmlDocument i LINQ do XML, dopóki nie załadujesz dokumentu z 10 000+ węzła, gdzie LINQ do XML wychodzi z przodu.

Odpowiedz

12

Trzy najczęstsze metody są odczytywane:

XmlDocument on czyta cały plik w strukturze drzewa, które mogą być następnie dostęp za pomocą XPath lub przeglądając wszystkie węzły. Wymaga dużej ilości pamięci dla bardzo dużych plików, ponieważ cała struktura XML musi być załadowana do pamięci. Bardzo dobry i prosty w użyciu dla mniejszych plików (mniej niż kilka megs).

XmlReader Szybki, ale także bardzo trudny w użyciu, ponieważ jest sekwencyjny. Jeśli kiedykolwiek będziesz musiał wrócić, nie możesz, a struktura XML jest zwykle bardzo podatna na dezorganizację zamówień. Ponadto, jeśli czytasz z nie kończącego się strumienia XML, jest to prawdopodobnie jedyny sposób, aby przejść.

Serializatory XML To w zasadzie robi wszystko dla ciebie, dostarczasz obiekt główny swojego modelu i tworzy on i czyta XML dla ciebie. Jednak prawie nie masz kontroli nad strukturą, a czytanie starszych wersji twojego obiektu to ból. To nie zadziała zbyt dobrze dla utrzymania.

XDocument i LINQ do XML Jak zauważył Daniel Straight. Ale nie znam go na tyle, aby skomentować. Zapraszam każdego do edytowania posta i dodawania brakujących informacji.


Pisanie to kolejna historia. Utrzymanie XmlDocument i XmlWriter jest bardzo łatwe w użyciu.

Powiedziałbym, z mojego doświadczenia, że ​​najlepszym połączeniem jest pisanie przy użyciu XmlWriter i czytanie przy użyciu XmlDocument.

4

Najszybszy jeden byłby XmlTextReader. Z MSDN:

"Reprezentuje czytnik, który zapewnia szybki, niezakodowany, dostępny tylko do przodu dostęp do danych XML w trybie .

Więcej tutaj: XmlTextReader Class

Choć tak naprawdę zależy od problemu, aby zdecydować, które „metoda” będzie najbardziej odniesieniu do odpowiednich do użycia. Jeśli chcesz przeczytać plik XML tylko jeden raz (na przykład: odczyt i buforowanie niektórych globalnych ustawień aplikacji itp.), Wygrywa XmlTextReader. Ale pamiętaj, że jest to czytnik tylko do odczytu. Jeśli chcesz przeszukać/zmodyfikować cały kod XML, prawdopodobnie powinieneś użyć XmlDocument Class.

+0

-1: 'XmlTextReader' nie powinien być używany bezpośrednio. Użyj 'XmlReader.Create', aby utworzyć' XmlReader'. –

5

Istnieje również XDocument i LINQ na XML, które uważam za zdecydowanie najbardziej efektywne, jeśli chodzi o czas programisty.

+0

Jakieś pojęcie, jak XDocument wykonuje w porównaniu do XmlDocument? – bstoney

+0

Nie wiem. Zwykle nie mam do czynienia z zestawami danych wystarczająco dużymi, aby wydajność miała znaczenie. –

Powiązane problemy