рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдореБрдЭреЗ xml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛ред рд╕рдм рдХреБрдЫ рдмреБрд░рд╛ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдлрд╝рд╛рдЗрд▓ рдореЗрдВ ~ 100,000 рд░рд┐рдХреЙрд░реНрдб рдереЗ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрд╛ред рдФрд░ рдореИрдВрдиреЗ .net рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ xml рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред
рдЙрдкрдХрд░рдг
рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрддрд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд┐рдП рдЧрдП рдереЗред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣реЛрдо рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рд╢реНрд░реЗрдгреА рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП:
- рдкреНрд░реЛрд╕реЗрд╕рд░: рдкреЗрдВрдЯрд┐рдпрдо рдбреБрдЕрд▓-рдХреЛрд░ T4300 2100 Mhz
- рд░реИрдо: DDR2 2048Mb
рдПрдЪрдЯреАрд╕реА 7 рдореЛрдЬрд╛рд░реНрдЯ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкрд░ рдЯреЗрд╕реНрдЯ рдХрд┐рдП рдЧрдПред
рдЯреЗрд╕реНрдЯ рдХреА рддреИрдпрд╛рд░реА
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ xml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдП рдереЗ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рднрд┐рдиреНрди рдереА рдФрд░ рдХреНрд░рдорд╢рдГ: 1, 10, 100, 1,000, 100,000 рдЯреБрдХрдбрд╝реЗред рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
<? xml version ="1.0" ? >
< items >
< item id ="433382426" />
< item id ="1215581841" />
< item id ="2085749980" />
........
< item id ="363608924" />
</ items >
* This source code was highlighted with Source Code Highlighter .
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг 100 рдмрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХрд╛ рдФрд╕рддрди рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЦрд╛рд▓реА рдкреНрд░реЛрд╕реЗрд╕рдЖрдИрдбреА (рдЖрдИрдбреА) рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред
XmlDocument.Load
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдВрдд рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдЪреНрдЪ рд▓рд╛рдЧрдд рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХреНрд╕рдкреАрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП, рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ)ред рд╡рд┐рдзрд┐ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
private static void XmlDocumentReader( string filename)
{
var doc = new XmlDocument ();
doc.Load(filename);
XmlNodeList nodes = doc.SelectNodes( "//item" );
if (nodes == null )
throw new ApplicationException( "invalid data" );
foreach ( XmlNode node in nodes)
{
string id = node.Attributes[ "id" ].Value;
ProcessId(id);
}
}
* This source code was highlighted with Source Code Highlighter .
LINQ to XML
Linq-to-XML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
private static void XDocumentReader( string filename)
{
XDocument doc = XDocument .Load(filename);
if (doc == null || doc.Root == null )
throw new ApplicationException( "invalid data" );
foreach ( XElement child in doc.Root.Elements( "item" ))
{
XAttribute attr = child. Attribute ( "id" );
if (attr == null )
throw new ApplicationException( "invalid data" );
string id = attr.Value;
ProcessId(id);
}
}
* This source code was highlighted with Source Code Highlighter .
XmlReader
рдФрд░ рдЕрдВрдд рдореЗрдВ, XML рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рддрд░реАрдХрд╛ XmlTextReader рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдордЭрдирд╛ рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реИред Xml-file рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ (рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рддрджрдиреБрд╕рд╛рд░, рд╡рд┐рдзрд┐ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
private static void XmlReaderReader( string filename)
{
using ( var reader = new XmlTextReader (filename))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType .Element)
{
if (reader.Name == "item" )
{
reader.MoveToAttribute( "id" );
string id = reader.Value;
ProcessId(id);
}
}
}
}
}
* This source code was highlighted with Source Code Highlighter .
* рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рддрд░реАрдХреЛрдВ рдореЗрдВ рдЬрд╛рдВрдЪ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо
рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдордп рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдФрд╕рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдордпред
| 1 | 10 | 100 | 1000 | 10000 | 100000 |
XmlDocument | 0.59 рдорд┐ | 0.5 рдорд┐ | 0.67 рдорд┐ | 2.49 рдПрдордПрд╕ | 21.73 рдорд┐ | 398.91 рдорд┐ |
XmlReader | 0.51 рдорд┐ | 0.47 рдорд┐ | 0.55 рдорд┐ | 1.31 рдорд┐ | 8.62 рдорд┐ | 79.65 рдПрдордПрд╕ |
Linq to XML | 0.57 рдорд┐ | 0.59 рдорд┐ | 0.64 рдПрдордПрд╕ | 2.09 рдорд┐ | 15.6 рдорд┐ | 192.66 рдорд┐ |

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЯреЗрдмрд▓ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, XmlReader, рдЬрдм рдмрдбрд╝реА xml рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ 2.42 рдЧреБрдирд╛
рдмреЗрд╣рддрд░ Linq To XML рдкреНрд░рджрд░реНрд╢рди рдЬреАрддрддрд╛ рд╣реИ, рдФрд░ XmlDocument
5 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░!рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкрд░ рдкрд░реАрдХреНрд╖рдг
рдЕрдм рдлреЛрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ .Net рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП XmlDocument.oad рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдФрд░ XmlReader рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛:
private static void XmlReaderReader( string filename)
{
using ( var reader = XmlReader.Create(filename)) {
while (reader.Read()) {
if (reader.NodeType == XmlNodeType .Element) {
if (reader.Name == "item" ) {
reader.MoveToAttribute( "id" );
string id = reader.Value;
ProcessId(id);
}
}
}
}
}
* This source code was highlighted with Source Code Highlighter .
рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо
рдЬрд╛рд╣рд┐рд░ рд╣реИ, XmlReader рдлреЛрди рдкрд░ рддреЗрдЬ рд╣реЛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЕрдВрддрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИред XmlReader рдлреЛрди рдкрд░, рдпрд╣ LINQ рд╕реЗ XML рддрдХ 1.91 рдЧреБрдирд╛ рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ 2.42 рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
| 1 | 10 | 100 | 1000 | 10000 | 100000 |
XmlReader | 1.67 рдорд┐ | 1.74 рдорд┐ | 3.19 рдорд┐ | 19.5 рдорд┐ | 173.84 рдПрдордПрд╕ | 1736.18 рдПрдордПрд╕ |
Linq to XML | 1.73 рдорд┐ | 2.21 рдорд┐ | 4.75 рдорд┐ | 31.39 рдорд┐ | 314.39 рдорд┐ | 3315.13 рдорд┐ |

рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ 100 рддрддреНрд╡реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ред

рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ 100,000 рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдлреЛрди рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдЧрддрд┐, рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЧреИрд░-рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред рдпрд╣ рдЬрд╛рдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рд╕рдордЭрд╛рдпрд╛, рдПрдХреНрд╕рдПрдордПрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рддрд░реАрдХрд╛ рд╣реИ, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХреНрд╕рдПрдордПрд▓рдЖрд░рдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрд╕реБрд╡рд┐рдзрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЬрдЯрд┐рд▓ рддрд░реАрдХрд╛ рд╣реИ - рд╣рд░ рдмрд╛рд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реВрдЪрдХ рдХрд┐рд╕ рддрддреНрд╡ рдкрд░ рд╣реИред
рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░рд╢рд┐рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рдХреЛрдб рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕рд╛рджрдЧреА рд╣реИ, рддреЛ LINQ to XML рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ XmlDocument.Load рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
PS рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐
рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдореБрдЭреЗ рдпрд╣ рд╕рдм рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
рдЕрджреНрдпрддрди: рд╕реБрдЭрд╛рд╡ рдкрд░,
alex_rus рдиреЗ XPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ XmlDocument рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдмреЗрд╣рддрд░ рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдзреАрдорд╛ рд░рд╣рд╛ред
рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдЦреНрдпрд╛ 3. рдПрдХреНрд╕рдкреАрдбрдЬрд╛рдЗрдирдореЗрдВрдЯ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдПрдХреНрд╕рдкреАрде рдХреЗ рд╕рд╛рде рдФрд░ рдмрд┐рдирд╛ред
| 1 | 10 | 100 | 1000 | 10000 | 100000 |
XmlDocument (c XPath) | 0.59 рдорд┐ | 0.5 рдорд┐ | 0.67 рдорд┐ | 2.49 рдПрдордПрд╕ | 21.73 рдорд┐ | 398.91 рдорд┐ |
XmlDocument (XPath рдХреЗ рдмрд┐рдирд╛) | 0.56 рдорд┐ | 0.5 рдорд┐ | 0.65 рдорд┐ | 2.24 рдорд┐ | 19.47 рдорд┐ | 362.75 рдПрдордПрд╕ |

рдЬреИрд╕рд╛ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ (рдФрд░ рдЖрдВрдХрдбрд╝рд╛) рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЗрд╡рд▓ 10% рдмрдврд╝реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реБрдЭрд╛рд╡ рдереЗ рдХрд┐ рдпрд╣ рдореВрд▓реНрдп рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред
рджрд░рдЕрд╕рд▓, XPath рдХреЗ рдмрд┐рдирд╛ XmlDocument рдХреЗ рд▓рд┐рдП рдХреЛрдб рдиреАрдЪреЗ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬреНрдЮрд╛рдиреА рд▓реЛрдЧ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдХреЗрд╡рд▓ 10% рдмрдврд╝реА рд╣реИ, рди рдХрд┐ "рдХрдИ рдмрд╛рд░"ред
private static void XmlDocumentReader2( string filename)
{
var doc = new XmlDocument ();
doc.Load(filename);
XmlElement root = doc.DocumentElement;
foreach (XmlElement el in root.ChildNodes)
{
if (el.Name != "item" ) continue ;
string id = el.Attributes[ "id" ].Value;
ProcessId(id);
}
}
* This source code was highlighted with Source Code Highlighter .