Quelle est la manière la plus rapide/la plus efficace pour lire ce XML Dictionnaire de Linq (ou quelque chose d'autre?)

Je suis très nouveau à l'analyse de XML, et j'ai commencé à apprendre à propos de linq qui, je pense, la meilleure solution ici. Je suis surtout intéressé par la performance que l'application que je suis en créant va lire les cours de bourse, ce qui parfois peut changer très rapidement.
Je reçois message suivant sur le serveur:

<?xml version="1.0" encoding="utf-16"?>
    <events>
        <header>
            <seq>0</seq>
        </header>
        <body>
            <orderBookStatus>
                <id>100093</id>
                <status>Opened</status>
            </orderBookStatus>
            <orderBook>
                <instrumentId>100093</instrumentId>
                <bids>
                    <pricePoint>
                        <price>1357.1</price>
                        <quantity>20</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1357.0</price>
                        <quantity>20</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1356.9</price>
                        <quantity>71</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1356.8</price>
                        <quantity>20</quantity>
                    </pricePoint>
                </bids>
                <offers>
                    <pricePoint>
                        <price>1357.7</price>
                        <quantity>51</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1357.9</price>
                        <quantity>20</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1358.0</price>
                        <quantity>20</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1358.1</price>
                        <quantity>20</quantity>
                    </pricePoint>
                    <pricePoint>
                        <price>1358.2</price>
                        <quantity>20</quantity>
                    </pricePoint>
                </offers>
                <lastMarketClosePrice>
                    <price>1356.8</price>
                    <timestamp>2011-05-03T20:00:00</timestamp>
                </lastMarketClosePrice>
                <dailyHighestTradedPrice />
                <dailyLowestTradedPrice />
                <valuationBidPrice>1357.1</valuationBidPrice>
                <valuationAskPrice>1357.7</valuationAskPrice>
                <lastTradedPrice>1328.1</lastTradedPrice>
                <exchangeTimestamp>1304501070802</exchangeTimestamp>
            </orderBook>
        </body>
    </events>

Mon but est d'analyser les prix des éléments

<pricePoint>
      <price>1358.2</price>
      <quantity>20</quantity>
</pricePoint>

dans le dictionnaire de la structure suivante:

Dictionary<double, PriceLevel> 

où le prix devrait être un double et PriceLevel est une classe

class PriceLevel
{
     int bid;
     int offer;

     public PriceLevel(int b, int o)
     {
          bid = b;
          offer = o;
     }


}

En fonction de l'élément, dans lequel chaque point de prix existant (soit des soumissions ou des offres) quantité doit être attribué en conséquence, c'est à dire si le point de prix existe dans les offres, la quantité doit être attribué à l'offre, et de 0 à offrir. À l'inverse, si le prix point existe dans l'offre, puis la quantité doit être attribué à l'offre et 0 offre.

J'espère que mon explication est claire, cependant si vous avez des problèmes de compréhension, s'il vous plaît n'hésitez pas à demander des précisions dans les commentaires.
Je vous serais très reconnaissant de l'aide dans la résolution de ce problème.

+++++++++++++++++++++++++++++++++++++++++
Mise à jour:

Je suis allé plus profondément dans le ruisseau, je suis en train de lire, et il ne va pas être aussi simple que je le pensais. J'ai découvert, que le flux ne sera pas toujours contenir l'ensemble du document, donc je vais devoir le lire en utilisant XmlReader à traiter le flux sur la base continue. Dans ce cas, comment puis-je lire les offres et les offres? J'ai quelque chose comme ceci:

StreamReader sr = new StreamReader("..\..\videos.xml");

        XmlReader xmlReader = XmlReader.Create(sr);
        while (xmlReader.Read())
        {
            if (xmlReader.HasValue)
            {
                OnXmlValue(this, new MessageEventArgs(true, xmlReader.Value));//saxContentHandler.Content(xmlReader.Value);
            }
            else
            {
                if (xmlReader.IsEmptyElement)
                {
                    OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
                    OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
                }
                else if (xmlReader.IsStartElement())
                {
                    OnStartElement(this, new MessageEventArgs(false, xmlReader.Name));
                }
                else
                {
                    OnEndElement(this, new MessageEventArgs(false, xmlReader.Name));
                }
            }
        }

mais j'ai du mal à lier le nom de l'élément à sa valeur ... c'est à dire, comment puis-je connaître les prix de l'offre point je suis en train de lire et si c'est le cas dans les soumissions ou des offres?
Je vous remercie pour l'aide

  • quel est le maximum de précision de votre point de prix? vous disposez de tous à 1 chiffre après la virgule, avec 4 chiffres avant la dp, dans votre exemple. Est-ce qu'il sera pour tous vos points de prix?
  • A quelle vitesse la plus rapide doivent être? Secondes, millisecondes, microsecondes?
  • Je pense qu'une précision maximale de 6 points décimaux devrait être suffisant. comme pour la vitesse et la performance, il y aura beaucoup de messages similaires par seconde pour me parler millisecondes au moins;)
  • Je considère que le programmeur de l'efficacité aussi bien ici. XmlReader est le plus bas de l'API .NET, tous les autres XML Api .NET utilise dans les coulisses. C'est une API de diffusion en continu, de sorte qu'il est le plus rapide. Pour le programmeur de la productivité, je préfère Linq to XML, c'est à dire XDocument. De toute façon pour certains des chiffres bruts: altamiracorp.com/blog/employee-posts/performance-linq-to-sql-vs, blogs.msdn.com/b/codejunkie/archive/2008/10/08/...
InformationsquelleAutor Macin | 2011-05-04