2009-05-13 9 views
5

W jednej z aplikacji, które rozwijamy, wykonujemy wiele przetwarzania XML. Obecnie używamy DOM i XPath dla większości przetwarzania i nie jesteśmy zbytnio zadowoleni z wydajności.Linq do XML vs DOM

W tej chwili rozważamy przeniesienie logiki przetwarzania XML do LINQ, a nasze wstępne badania sugerują, że wydajność LINQ jest znacznie lepsza niż DOM.

Przed wprowadzeniem tych zmian chciałbym się dowiedzieć, co myślą o tym inni. Czy używanie LINQ jest lepszą opcją? Wszelkie disavantages etc ...

Dzięki Shamika


Dziękuję bardzo za odpowiedzi. Zrobiłem kilka testów wydajności i zgodnie z oczekiwaniami XmlReader wykonał zarówno XmlDocument, jak i LINQ. Należy pamiętać, że jest to tylko dla odczytu XML.

Również jeśli potrzebujesz łatwości użycia LINQ możesz zaimplementować przetwarzanie LINQ XML za pomocą niektórych funkcji XmlReader i może uzyskać znacznie lepszą wydajność niż XmlDocument. Proszę zapoznać się z komentarzami "rwwilden", aby uzyskać więcej informacji.

Dzięki.

+0

Spójrz na to pytanie: http: // stackoverflow.com/questions/182976 –

Odpowiedz

1

Podejrzewam, że LINQ -> XML jest łatwiejszy w użyciu niż DOM. Jest bardziej intuicyjny i łatwiejszy do odczytania IMO.

2

Nie jestem pewien, czy zauważysz bardzo duży wzrost wydajności przy użyciu LINQ2XML zamiast DOM/XPath. Zarówno dla DOM, jak i dla LINQ2XML dokument, który poddajesz iteracji, jest reprezentowany jako drzewo w pamięci.

Jeśli wydajność naprawdę jest problemem i masz dość duże dokumenty XML, możesz rzucić okiem na podstawową obsługę przesyłania strumieniowego XML, która jest zaimplementowana w ramach (przez XStreamingElement). Sprawdź także ten zespół Microsoft XML blog entry.

3

Korzystanie z DOM (tj. System.Xml.XmlDocument) prawdopodobnie będzie wolniejsze, ze względu na bogate wsparcie nawigacyjne (wszystkie te odniesienia zaczynają się sumować), a narzut ten stanie się bardziej znaczący wraz ze wzrostem liczby węzłów.

Prostsze modele obiektów (System.Xml.Linq.XDocument i System.Xml.XPath.XPathDocument) nie mają tak złożonych struktur, ale umożliwiają nawigację w inny sposób. Może to zwiększyć obciążenie procesora, ale powinno oszczędzić pamięć.

Koniec końców, musisz profilować (czas i przestrzeń) w swoim przypadku, a także zastanowić się, ile sprawia to prawdziwa różnica (postrzegana przez użytkownika).

Jednak, aby uzyskać najlepszą wydajność, nie ładuj całego dokumentu do pamięci: użyj System.Xml.XmlReader i System.Xml.XmlWriter i wykonaj wszystkie czynności w strumieniu. Oczywiście to zwiększa koszty rozwoju.

. NET ma bogaty (może zbyt bogaty) zbiór interfejsów API XML, który jest najlepszy (a przynajmniej najgorszy), ponieważ można go określić tylko poprzez dokonanie kompromisów, które są dla Ciebie najlepsze.

Osobiście wolałbym uniknąć XmlDocument i użyć jednej XPathDocument (zwłaszcza do czytania i kwerendy z XPath) lub XDocument (zwłaszcza utworzyć) gdzie XmlReader/XmlWriter nie daje tyle o wzrost wydajności uzasadnienia.