2009-05-13 39 views
5

Trong một trong các ứng dụng chúng tôi đang phát triển, chúng tôi thực hiện rất nhiều quá trình xử lý XML. Hiện tại chúng tôi sử dụng DOM và XPath cho hầu hết quá trình xử lý và chúng tôi không hài lòng với hiệu suất.LINQ to XML vs DOM

Hiện tại, chúng tôi đang xem xét di chuyển logic xử lý XML sang LINQ và các điều tra ban đầu của chúng tôi cho thấy hiệu suất LINQ tốt hơn nhiều so với DOM.

Trước khi thực hiện những thay đổi này, tôi muốn biết người khác cảm thấy thế nào về điều này. Đang sử dụng LINQ một lựa chọn tốt hơn? Bất kỳ disavantages vv ...

Cảm ơn, Shamika


Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Tôi đã làm một số thử nghiệm hiệu suất và như mong đợi XmlReader ra thực hiện cả XmlDocument và LINQ. Xin lưu ý rằng điều này chỉ dành cho việc đọc XML.

Ngoài ra nếu bạn cần dễ sử dụng LINQ, bạn có thể triển khai LINQ XML xử lý bằng cách sử dụng một số tính năng của XmlReader và có thể nhận được hiệu suất tốt hơn nhiều so với XmlDocument. Vui lòng tham khảo nhận xét "rwwilden" để biết thêm thông tin.

Cảm ơn.

+0

Hãy xem câu hỏi này: http: // stackoverflow.com/questions/182976 –

Trả lời

1

Việc tôi thực hiện trên đó là LINQ -> XML là bước nhảy vọt và dễ sử dụng hơn DOM. Nó trực quan hơn với tôi và dễ đọc hơn IMO.

2

Tôi không chắc chắn bạn sẽ nhận thấy một cải tiến hiệu suất rất lớn bằng cách sử dụng LINQ2XML thay vì DOM/XPath. Đối với cả DOM và LINQ2XML tài liệu mà bạn lặp lại, được biểu diễn như một cây trong bộ nhớ.

Nếu hiệu suất thực sự là vấn đề và bạn có tài liệu XML khá lớn, bạn có thể xem xét hỗ trợ luồng XML thô sơ được triển khai trong khung (qua XStreamingElement). Ngoài ra, hãy kiểm tra nhóm Microsoft XML blog entry này.

3

Sử dụng DOM (tức là System.Xml.XmlDocument) có thể chậm hơn do hỗ trợ điều hướng phong phú (tất cả các tham chiếu bắt đầu thêm) và chi phí này sẽ trở nên quan trọng hơn khi số lượng nút tăng.

Mô hình đối tượng đơn giản (System.Xml.Linq.XDocumentSystem.Xml.XPath.XPathDocument) không có cấu trúc phức tạp như vậy, nhưng cho phép điều hướng bằng các phương tiện khác. Điều này có thể thêm vào CPU overhead nhưng nên tiết kiệm bộ nhớ.

Cuối cùng, bạn cần phải lập hồ sơ (thời gian và không gian) trong trường hợp của bạn, và cũng xem xét sự khác biệt thực sự (người dùng nhận thức) mà nó tạo ra.

Tuy nhiên, để có hiệu suất tối ưu không tải toàn bộ tài liệu vào bộ nhớ: sử dụng System.Xml.XmlReaderSystem.Xml.XmlWriter và thực hiện mọi thứ trong luồng. Tất nhiên điều này cho biết thêm chi phí phát triển. .NET có một tập hợp các API XML phong phú (có thể quá giàu), tốt nhất (hoặc ít nhất, ít nhất là tồi tệ nhất) cho bạn chỉ có thể được xác định bởi bạn thực hiện các giao dịch tốt nhất cho bạn.

Cá nhân tôi sẽ tránh XmlDocument và sử dụng một trong hai XPathDocument (đặc biệt là để đọc, và truy vấn với XPath) hoặc XDocument (đặc biệt là để tạo ra), nơi XmlReader/XmlWriter không cung cấp đủ của một tăng hiệu suất để biện minh.