-
Notifications
You must be signed in to change notification settings - Fork 274
/
Copy pathPerf.XElement.cs
81 lines (68 loc) · 3.1 KB
/
Perf.XElement.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using BenchmarkDotNet.Attributes;
using MicroBenchmarks;
namespace System.Xml.Linq
{
[BenchmarkCategory(Categories.Libraries)]
public class Perf_XElement
{
private XElement _element;
[Benchmark]
public XElement CreateElement() => new XElement("Root", "text node");
[Benchmark]
public XElement CreateElementWithNamespace() => new XElement("{Namespace}Root", "text node");
[Benchmark(OperationsPerInvoke = 8)]
public XElement CreateWithElements()
{
XElement doc = new XElement("Root", // Typical XElement creation scenario with children
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content"),
new XElement("elem1", "some xml element content")
);
return doc;
}
[Benchmark(OperationsPerInvoke = 8)]
public XElement CreateElementsWithNamespace()
{
XElement doc = new XElement("Root",
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content"),
new XElement("{namespace}elem1", "some xml element content")
);
return doc;
}
[GlobalSetup(Targets = new[] { nameof(GetElement), nameof(GetElementWithNamespace), nameof(GetAttribute), nameof(GetValue) })]
public void Setup()
{
_element = new XElement("Root",
new XAttribute("id", 123),
new XElement("Child1", 1),
new XElement("{ns}Child2", 2),
new XElement("Child3", 3),
new XElement("Child4", 4),
new XElement("{ns}Child4", 4),
new XElement("Child5", 5)
);
}
[Benchmark]
public XElement GetElement() => _element.Element("Child4");
[Benchmark]
public XElement GetElementWithNamespace() => _element.Element("{ns}Child4");
[Benchmark]
public XAttribute GetAttribute() => _element.Attribute("id");
[Benchmark]
public string GetValue() => _element.Value;
}
}