-
Notifications
You must be signed in to change notification settings - Fork 0
/
c-string-concatenation-best-practice.html
200 lines (176 loc) · 17.3 KB
/
c-string-concatenation-best-practice.html
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<!DOCTYPE html>
<html lang="en">
<head>
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700,400italic' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="http://www.emadmokhtar.com/theme/stylesheet/style.min.css">
<link rel="stylesheet" type="text/css" href="http://www.emadmokhtar.com/theme/stylesheet/pygments.min.css">
<link rel="stylesheet" type="text/css" href="http://www.emadmokhtar.com/theme/stylesheet/font-awesome.min.css">
<link href="http://www.emadmokhtar.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Emad Mokhtar's Framework Atom">
<link href="http://www.emadmokhtar.com/feeds/all.rss.xml" type="application/rss+xml" rel="alternate" title="Emad Mokhtar's Framework RSS">
<link rel="shortcut icon" href="http://www.emadmokhtar.com/images/favicon.ico" type="image/x-icon">
<link rel="icon" href="http://www.emadmokhtar.com/images/favicon.ico" type="image/x-icon">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="" />
<meta name="author" content="EmadMokhtar" />
<meta name="description" content="Once I’ve start to learn .NET and C# I heard about the difference between string + concatenation operator and StringBuilder class in C# and how to use them and which on is better to perform string concatenation, so I thought to give it a real benchmark and see the results. For benchmarking I’ll use + Operator, StringBuilde class, and string.Concat() method, so let’s start. Code: var nameUsingPlus = "I will tell all of my friends about emadmokhtar.com today!"; var plusWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameUsingPlus += " I will tell all of my friends about emadmokhtar.com today!"; } plusWatch.Stop(); var nameConcatMethod = "I will tell all of my friends about emadmokhtar.com today!"; var concatMethodWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameConcatMethod = string.Concat(nameConcatMethod, " I will tell all of my friends about emadmokhtar.com today!"); } concatMethodWatch.Stop(); var nameStringBuilder = new StringBuilder("I will tell all of my friends about emadmokhtar.com today!"); var stringBuilderWatch = Stopwatch.StartNew(); for (int i = 0; i < 1000000; i++) { nameStringBuilder.Append(" I will tell all of my friends about emadmokhtar.com today!"); } var name = nameStringBuilder.ToString(); stringBuilderWatch.Stop(); Console.WriteLine("Plus Oprator took {0}", plusWatch.Elapsed.Milliseconds …" />
<meta name="keywords" content="csharp">
<meta property="og:site_name" content="Emad Mokhtar's Framework"/>
<meta property="og:title" content="C# String Concatenation Best Practice"/>
<meta property="og:description" content="Once I’ve start to learn .NET and C# I heard about the difference between string + concatenation operator and StringBuilder class in C# and how to use them and which on is better to perform string concatenation, so I thought to give it a real benchmark and see the results. For benchmarking I’ll use + Operator, StringBuilde class, and string.Concat() method, so let’s start. Code: var nameUsingPlus = "I will tell all of my friends about emadmokhtar.com today!"; var plusWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameUsingPlus += " I will tell all of my friends about emadmokhtar.com today!"; } plusWatch.Stop(); var nameConcatMethod = "I will tell all of my friends about emadmokhtar.com today!"; var concatMethodWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameConcatMethod = string.Concat(nameConcatMethod, " I will tell all of my friends about emadmokhtar.com today!"); } concatMethodWatch.Stop(); var nameStringBuilder = new StringBuilder("I will tell all of my friends about emadmokhtar.com today!"); var stringBuilderWatch = Stopwatch.StartNew(); for (int i = 0; i < 1000000; i++) { nameStringBuilder.Append(" I will tell all of my friends about emadmokhtar.com today!"); } var name = nameStringBuilder.ToString(); stringBuilderWatch.Stop(); Console.WriteLine("Plus Oprator took {0}", plusWatch.Elapsed.Milliseconds …"/>
<meta property="og:locale" content="en_US"/>
<meta property="og:url" content="http://www.emadmokhtar.com/c-string-concatenation-best-practice.html"/>
<meta property="og:type" content="article"/>
<meta property="article:published_time" content="2014-06-18 11:57:00+03:00"/>
<meta property="article:modified_time" content=""/>
<meta property="article:author" content="http://www.emadmokhtar.com/author/emadmokhtar.html">
<meta property="article:section" content="dotNet"/>
<meta property="article:tag" content="csharp"/>
<meta property="og:image" content="http://www.emadmokhtar.com/images/profile.jpg">
<title>Emad Mokhtar's Framework – C# String Concatenation Best Practice</title>
</head>
<body>
<aside>
<div>
<a href="http://www.emadmokhtar.com">
<img src="http://www.emadmokhtar.com/images/profile.jpg" alt="" title="">
</a>
<h1><a href="http://www.emadmokhtar.com"></a></h1>
<p>Geek developer who's in search of code perfection.</p>
<nav>
<ul class="list">
<li><a href="http://www.emadmokhtar.com">Blog</a></li>
<li><a href="http://www.emadmokhtar.com/pages/podcasts.html#podcasts">Podcasts</a></li>
<li><a href="http://www.emadmokhtar.com/pages/projects.html#projects">Projects</a></li>
<li><a href="https://emadmokhtar.github.io/resume" target="_blank">Resume</a></li>
</ul>
</nav>
<ul class="social">
<li><a class="sc-envelope-o" href="mailto:emad@emadmokhtar.com" target="_blank"><i class="fa fa-envelope-o"></i></a></li>
<li><a class="sc-github" href="https://www.github.com/EmadMokhtar" target="_blank"><i class="fa fa-github"></i></a></li>
<li><a class="sc-linkedin" href="https://www.linkedin.com/in/emadmokhtar/" target="_blank"><i class="fa fa-linkedin"></i></a></li>
<li><a class="sc-stack-overflow" href="http://stackoverflow.com/users/373051/emad-mokhtar" target="_blank"><i class="fa fa-stack-overflow"></i></a></li>
<li><a class="sc-facebook" href="https://www.facebook.com/emadmokhtarframework/" target="_blank"><i class="fa fa-facebook"></i></a></li>
<li><a class="sc-twitter" href="https://twitter.com/emadmokhtar" target="_blank"><i class="fa fa-twitter"></i></a></li>
</ul>
</div>
</aside>
<main>
<nav>
<a href="http://www.emadmokhtar.com">Home</a>
<a href="https://emadmokhtar.github.io/resume">Resume</a>
<a href="http://www.emadmokhtar.com/feeds/all.atom.xml">Atom</a>
<a href="http://www.emadmokhtar.com/feeds/all.rss.xml">RSS</a>
</nav>
<article>
<header>
<h1 id="c-string-concatenation-best-practice">C# String Concatenation Best Practice</h1>
<p>Posted on Wed 18 June 2014 in <a href="http://www.emadmokhtar.com/category/dotnet.html">dotNet</a> <b>Read in 2 min.</b></p>
</header>
<div>
<p>Once I’ve start to learn .NET and C# I heard about the difference
between string <strong>+ concatenation operator</strong> and <strong>StringBuilder</strong> class
in C# and how to use them and which on is better to perform string
concatenation, so I thought to give it a real benchmark and see the
results.</p>
<p>For benchmarking I’ll use <code>+ Operator</code>, <code>StringBuilde</code> class, and
<code>string.Concat()</code> method, so let’s start.</p>
<h1>Code:</h1>
<div class="highlight"><pre><span></span><span class="kt">var</span> <span class="n">nameUsingPlus</span> <span class="p">=</span> <span class="s">"I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">plusWatch</span> <span class="p">=</span> <span class="n">Stopwatch</span><span class="p">.</span><span class="n">StartNew</span><span class="p">();</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p"><</span> <span class="m">10000</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span>
<span class="p">{</span>
<span class="n">nameUsingPlus</span> <span class="p">+=</span> <span class="s">" I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">plusWatch</span><span class="p">.</span><span class="n">Stop</span><span class="p">();</span>
<span class="kt">var</span> <span class="n">nameConcatMethod</span> <span class="p">=</span> <span class="s">"I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">;</span>
<span class="kt">var</span> <span class="n">concatMethodWatch</span> <span class="p">=</span> <span class="n">Stopwatch</span><span class="p">.</span><span class="n">StartNew</span><span class="p">();</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p"><</span> <span class="m">10000</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span>
<span class="p">{</span>
<span class="n">nameConcatMethod</span> <span class="p">=</span> <span class="kt">string</span><span class="p">.</span><span class="n">Concat</span><span class="p">(</span><span class="n">nameConcatMethod</span><span class="p">,</span> <span class="s">" I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">concatMethodWatch</span><span class="p">.</span><span class="n">Stop</span><span class="p">();</span>
<span class="kt">var</span> <span class="n">nameStringBuilder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">StringBuilder</span><span class="p">(</span><span class="s">"I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">);</span>
<span class="kt">var</span> <span class="n">stringBuilderWatch</span> <span class="p">=</span> <span class="n">Stopwatch</span><span class="p">.</span><span class="n">StartNew</span><span class="p">();</span>
<span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p"><</span> <span class="m">1000000</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span>
<span class="p">{</span>
<span class="n">nameStringBuilder</span><span class="p">.</span><span class="n">Append</span><span class="p">(</span><span class="s">" I will tell all of my friends about emadmokhtar.com today!"</span><span class="p">);</span>
<span class="p">}</span>
<span class="kt">var</span> <span class="n">name</span> <span class="p">=</span> <span class="n">nameStringBuilder</span><span class="p">.</span><span class="n">ToString</span><span class="p">();</span>
<span class="n">stringBuilderWatch</span><span class="p">.</span><span class="n">Stop</span><span class="p">();</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"Plus Oprator took {0}"</span><span class="p">,</span> <span class="n">plusWatch</span><span class="p">.</span><span class="n">Elapsed</span><span class="p">.</span><span class="n">Milliseconds</span><span class="p">);</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"String.Concat() took {0}"</span><span class="p">,</span> <span class="n">concatMethodWatch</span><span class="p">.</span><span class="n">Elapsed</span><span class="p">.</span><span class="n">Milliseconds</span><span class="p">);</span>
<span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">"StringBuilder took {0}"</span><span class="p">,</span> <span class="n">stringBuilderWatch</span><span class="p">.</span><span class="n">Elapsed</span><span class="p">.</span><span class="n">Milliseconds</span><span class="p">);</span>
</pre></div>
<h1>Results:</h1>
<p><img alt="stringbench" src="http://www.emadmokhtar.com/images/stringbench1.png"></p>
<p>Please note in code I benchmarked <code>+ operator</code> and <code>String.Concat()</code>
method for 10000 times and <code>StringBuilder</code> for 1000000 times and
<code>StringBuilder</code> is still the most efficient way to concatenate strings
in C#.</p>
<h1>Explanation:</h1>
<p>String in .NET Framework is immutable so you can’t change String after
assign a value for it. When you use + Operator or String,Concat() to
concatunate two strings it’ll create a third string and assign the first
and second string values to it.</p>
<p>this line of code <code>string fullName = "Emad" + "Mokhtar";</code></p>
<p><img alt="string2" src="http://www.emadmokhtar.com/images/string2.png"></p>
<p>is equivalents to this code </p>
<div class="highlight"><pre><span></span><span class="kt">string</span> <span class="n">firstName</span> <span class="p">=</span> <span class="s">"Emad"</span><span class="p">;</span>
<span class="kt">string</span> <span class="n">lastName</span> <span class="p">=</span> <span class="s">"Mokhtar"</span><span class="p">;</span>
<span class="kt">string</span> <span class="n">fullName</span> <span class="p">=</span> <span class="n">firstName</span> <span class="p">+</span> <span class="n">lastName</span><span class="p">;</span>
</pre></div>
<p><img alt="string" src="http://www.emadmokhtar.com/images/string.png"></p>
<p>But when you use <strong>StringBuilder</strong> class C# compiler will take care of
memory allocations by using the same C/C++ characters array concept and
produce the string object once you call <code>ToString()</code> method.</p>
</div>
<div class="tag-cloud">
<p>
<a href="http://www.emadmokhtar.com/tag/csharp.html">csharp</a>
</p>
</div>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = 'emadmokhtarsframework';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
</article>
<footer>
<p>© Emad Mokhtar </p>
<p>Built using <a href="http://getpelican.com" target="_blank">Pelican</a> - <a href="https://github.com/alexandrevicenzi/flex" target="_blank">Flex</a> theme by <a href="http://alexandrevicenzi.com" target="_blank">Alexandre Vicenzi</a></p> </footer>
</main>
<!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-11401860-2', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BlogPosting",
"name": "C# String Concatenation Best Practice",
"headline": "C# String Concatenation Best Practice",
"datePublished": "2014-06-18 11:57:00+03:00",
"dateModified": "",
"author": {
"@type": "Person",
"name": "EmadMokhtar",
"url": "http://www.emadmokhtar.com/author/emadmokhtar.html"
},
"image": "http://www.emadmokhtar.com/images/profile.jpg",
"url": "http://www.emadmokhtar.com/c-string-concatenation-best-practice.html",
"description": "Once I’ve start to learn .NET and C# I heard about the difference between string + concatenation operator and StringBuilder class in C# and how to use them and which on is better to perform string concatenation, so I thought to give it a real benchmark and see the results. For benchmarking I’ll use + Operator, StringBuilde class, and string.Concat() method, so let’s start. Code: var nameUsingPlus = "I will tell all of my friends about emadmokhtar.com today!"; var plusWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameUsingPlus += " I will tell all of my friends about emadmokhtar.com today!"; } plusWatch.Stop(); var nameConcatMethod = "I will tell all of my friends about emadmokhtar.com today!"; var concatMethodWatch = Stopwatch.StartNew(); for (int i = 0; i < 10000; i++) { nameConcatMethod = string.Concat(nameConcatMethod, " I will tell all of my friends about emadmokhtar.com today!"); } concatMethodWatch.Stop(); var nameStringBuilder = new StringBuilder("I will tell all of my friends about emadmokhtar.com today!"); var stringBuilderWatch = Stopwatch.StartNew(); for (int i = 0; i < 1000000; i++) { nameStringBuilder.Append(" I will tell all of my friends about emadmokhtar.com today!"); } var name = nameStringBuilder.ToString(); stringBuilderWatch.Stop(); Console.WriteLine("Plus Oprator took {0}", plusWatch.Elapsed.Milliseconds …"
}
</script></body>
</html>