search
  • Sign In
  • Sign Up
Password reset successful

Follow the proiects vou are interested in andi aet the latestnews about them taster

Home Backend Development XML/RSS Tutorial Performance comparison of XML data reading methods (2)

Performance comparison of XML data reading methods (2)

Feb 13, 2017 pm 03:45 PM

In the last issue, we summarized the general XML reading method, but we don’t usually need to use all the data of the XML source, so I also experimented with reading some data, such as the position based on the first letter of the title. Filter.

 For the three random reading methods, you only need to change the query conditions

 

XmlDocument:
var nodeList = doc.DocumentElement.SelectNodes("item[substring(title,1,1)='M'][position() mod 10 = 0]");
  XPathNavigator:
var nodeList = nav.Select("/channel/item[substring(title,1,1)='M'][position() mod 10 = 0]");
  Xml Linq:
var nodelist = from node in xd.XPathSelectElements("/channel/item[substring(title,1,1)='M'][position() mod 10 = 0]")

Using XPath, you only need to change one line of code. XPath is also fairly easy to master, much simpler than SQL. You can refer to W3C Shcool's syntax introduction and MSDN's LINQ To XML for XPath users, and you will be able to master the secrets in a quarter of an hour.

But for the XmlReader method, it is not that easy. It also reads the title starting with M, and takes one item from every ten items. After thinking for a long time, I couldn't think of an elegant implementation method, so I had to do this. :

Code

static List<Channel> testXmlReader2()
{
    var lstChannel = new List<Channel>();
    var reader = XmlReader.Create(xmlStream);
    int n = 0;Channel channel = null;
Search:
    while (reader.Read())
    {
        if (reader.Name == "item" && reader.NodeType == XmlNodeType.Element)
        {  
            while (reader.Read())
            {
                if (reader.Name == "item") break;
                if (reader.NodeType != XmlNodeType.Element) continue;
                switch (reader.Name)
                {
                    case "title":
                        var title = reader.ReadString();
                        if (title[0] != 'M') goto Search;          
                        n++;
                        if (n % 10 != 0) goto Search; 
                        channel = new Channel();
                        channel.Title = title;
                        break;
                    case "link":
                        channel.Link = reader.ReadString();
                        break;
                    case "description":
                        channel.Description = reader.ReadString();
                        break;
                    case "content":
                        channel.Content = reader.ReadString();
                        break;
                    case "pubDate":
                        channel.PubDate = reader.ReadString();
                        break;
                    case "author":
                        channel.Author = reader.ReadString();
                        break;
                    case "category":
                        channel.Category = reader.ReadString();
                        break;
                    default:
                        break;
                }
                lstChannel.Add(channel);
            }
        }
    }
    return lstChannel;
}

It can be seen that the code structure has changed significantly. In order to perform conditional screening, I had to add local variable n, adjust the initialization of the entity class, and add the location of the collection statement. I was even forced to use the goto statement that I had forgotten for many years to jump (VB is better). Business logic seeps into the implementation of code details. In Lao Zhao's words, a burst of grammatical noise hits the face.

The implementation proxy class of XmlTextReader, XmlTextReaderImp (internal, cannot be used directly), is a super class with tens of thousands of lines of code, which encapsulates a large number of operations directly performed on the Xml character level. Since the operation is very close to the bottom layer, it is difficult to find a good code optimization method at a macro level. If the filtering conditions, that is, the business logic is more complicated, the code will be completely different, and the comprehensibility and maintainability will be like a mirror.

Now let’s compare the time performance:

XmlDocment    26ms    
XPathNavigator    26ms    
XmlTextReader    20ms    
Xml Linq    28ms

The data of the four methods have become close. The time consumption of Document and Navigator has dropped significantly, while the Reader method has not dropped much, because it still has to read from the beginning to the end. The 3ms reduction can be attributed to the reduction in entity object creation overhead. What is more strange is that the Linq method has not changed and fell at the end.

You can test different query conditions. It can be seen that each of these four methods has its own performance limit, which is related to the size of the Xml source. For example, for the first two methods, it depends on the execution time of the XmlDocument.Load method. On my machine, it takes 23ms to load the Xml. The Linq method is not unbreakable. If there are few results to be processed, the execution time will be reduced by 1 to 2 milliseconds.

In Document and Navigator mode, performance will decrease significantly as the amount of data increases. It's easy to guess that it's because they create a lot of useless objects. Looking at the memory usage of each method, we can see that when all the data is loaded without filtering, the Document method takes up about 23.3M of memory, while the Navigator method only takes up about 22.9M. This also explains why the performance of the Document method decreases more obviously. Reader mode is fully loaded with data and only requires about 20.1M of memory. Excluding the overhead of program startup itself, it takes up less than half of the memory compared to the previous two methods. The Linq method has another amazing performance in terms of memory, accounting for less than 500k more than the Reader method.

Further analysis led to a further conclusion: Unless there is a special need, use XmlTextReader with caution. It is poorly prepared for changes and prone to errors. It is more strongly recommended to use the Linq method. Although the time performance is slightly lower than the Navigator method in some cases, its excellent memory usage performance has established its first choice. And I believe that Linq To XML will be even more powerful in the future.

The above is the performance comparison of XML data reading methods (2). For more related content, please pay attention to the PHP Chinese website (m.sbmmt.com)!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

ArtGPT

ArtGPT

AI image generator for creative art from text prompts.

Stock Market GPT

Stock Market GPT

AI powered investment research for smarter decisions

Popular tool

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

JSON vs. XML: Why RSS Chose XML JSON vs. XML: Why RSS Chose XML May 05, 2025 am 12:01 AM

RSS chose XML instead of JSON because: 1) XML's structure and verification capabilities are better than JSON, which is suitable for the needs of RSS complex data structures; 2) XML was supported extensively at that time; 3) Early versions of RSS were based on XML and have become a standard.

RSS in XML: Decoding Tags, Attributes, and Structure RSS in XML: Decoding Tags, Attributes, and Structure Apr 24, 2025 am 12:09 AM

RSS is an XML-based format used to publish and subscribe to content. The XML structure of an RSS file includes a root element, an element, and multiple elements, each representing a content entry. Read and parse RSS files through XML parser, and users can subscribe and get the latest content.

Understanding RSS Documents: A Comprehensive Guide Understanding RSS Documents: A Comprehensive Guide May 09, 2025 am 12:15 AM

RSS documents are a simple subscription mechanism to publish content updates through XML files. 1. The RSS document structure consists of and elements and contains multiple elements. 2. Use RSS readers to subscribe to the channel and extract information by parsing XML. 3. Advanced usage includes filtering and sorting using the feedparser library. 4. Common errors include XML parsing and encoding issues. XML format and encoding need to be verified during debugging. 5. Performance optimization suggestions include cache RSS documents and asynchronous parsing.

XML's Advantages in RSS: A Technical Deep Dive XML's Advantages in RSS: A Technical Deep Dive Apr 23, 2025 am 12:02 AM

XML has the advantages of structured data, scalability, cross-platform compatibility and parsing verification in RSS. 1) Structured data ensures consistency and reliability of content; 2) Scalability allows the addition of custom tags to suit content needs; 3) Cross-platform compatibility makes it work seamlessly on different devices; 4) Analytical and verification tools ensure the quality and integrity of the feed.

Building XML Applications with C  : Practical Examples Building XML Applications with C : Practical Examples May 03, 2025 am 12:16 AM

You can use the TinyXML, Pugixml, or libxml2 libraries to process XML data in C. 1) Parse XML files: Use DOM or SAX methods, DOM is suitable for small files, and SAX is suitable for large files. 2) Generate XML file: convert the data structure into XML format and write to the file. Through these steps, XML data can be effectively managed and manipulated.

RSS, XML and the Modern Web: A Content Syndication Deep Dive RSS, XML and the Modern Web: A Content Syndication Deep Dive May 08, 2025 am 12:14 AM

RSS and XML are still important in the modern web. 1.RSS is used to publish and distribute content, and users can subscribe and get updates through the RSS reader. 2. XML is a markup language and supports data storage and exchange, and RSS files are based on XML.

XML in C  : Handling Complex Data Structures XML in C : Handling Complex Data Structures May 02, 2025 am 12:04 AM

Working with XML data structures in C can use the TinyXML or pugixml library. 1) Use the pugixml library to parse and generate XML files. 2) Handle complex nested XML elements, such as book information. 3) Optimize XML processing code, and it is recommended to use efficient libraries and streaming parsing. Through these steps, XML data can be processed efficiently.

Beyond Basics: Advanced RSS Features Enabled by XML Beyond Basics: Advanced RSS Features Enabled by XML May 07, 2025 am 12:12 AM

RSS enables multimedia content embedding, conditional subscription, and performance and security optimization. 1) Embed multimedia content such as audio and video through tags. 2) Use XML namespace to implement conditional subscriptions, allowing subscribers to filter content based on specific conditions. 3) Optimize the performance and security of RSSFeed through CDATA section and XMLSchema to ensure stability and compliance with standards.

Related articles