<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alles zum Thema .NET, C# und Freiberuflichkeit</title>
	<atom:link href="http://www.activesoft.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.activesoft.de</link>
	<description>Ein weiterer WordPress-Blog</description>
	<lastBuildDate>Tue, 08 Mar 2011 09:15:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Kompilieren auf Mehrkernprozessoren</title>
		<link>http://www.activesoft.de/2011/03/kompilieren-auf-mehrkernprozessoren/</link>
		<comments>http://www.activesoft.de/2011/03/kompilieren-auf-mehrkernprozessoren/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 09:09:27 +0000</pubDate>
		<dc:creator>tommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.activesoft.de/2011/03/kompilieren-auf-mehrkernprozessoren/</guid>
		<description><![CDATA[Aktuell arbeite ich in einer Solution mit 43 Projekten. Das Kompilieren dauert da ca. 1 Minute. Wie über den Taskmanager ersichtlich, waren die Prozessoren nur mit 12 % belastet. Also dachte ich mir das die HD der Flaschenhals ist und kurzerhand eine Curcial C300 SSD verbaut. Erschrocken musste ich feststellen das sich beim kompilieren nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Aktuell arbeite ich in einer Solution mit <strong>43 Projekten</strong>. Das Kompilieren dauert da ca. 1 Minute. </p>
<p>Wie über den Taskmanager ersichtlich, waren die Prozessoren nur mit 12 % belastet. Also dachte ich mir das die HD der Flaschenhals ist und kurzerhand eine <strong>Curcial C300 SSD</strong> verbaut. Erschrocken musste ich feststellen das sich beim kompilieren nicht viel getan hat. </p>
<p>Zur gleichen Thematik hat jemand einen <a href="http://www.mycsharp.de/wbb2/thread.php?threadid=93558" target="_blank">Eintrag im C# Forum</a> erstellt der mich dann auf die richtige Spur brachte.</p>
<p><strong>Des Rätsels Lösung:</strong> Der Standard Build Prozess ist <strong>nicht</strong> auf MultiCore ausgelegt. Dies kann man mit <strong>MSBuild /m</strong> explizit durchführen. Bei mir hat sich die Buildgeschwindigkeit <font color="#ff0000">verdoppelt</font>!</p>
<p><a href="http://www.activesoft.de/wordpress/wp-content/uploads/msbuild-speed.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="msbuild speed" border="0" alt="msbuild speed" src="http://www.activesoft.de/wordpress/wp-content/uploads/msbuild-speed_thumb.png" width="443" height="205" /></a></p>
<p>Wie das genau mit MSBuild funktioniert erfährt man <a href="http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx" target="_blank">hier</a>. Wie sich das Ganze in VS integrieren lässt ist <a href="http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx" target="_blank">hier</a> nachzulesen.</p>
<p>Mehr zum Thema MS-Build gibt es am <a href="http://www.dotnet-ug-frankfurt.de/Event/tabid/119/ID/47/Default.aspx" target="_blank">17.03.2011 bei unserer DevGroup Frankfurt</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.activesoft.de/2011/03/kompilieren-auf-mehrkernprozessoren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Was hat es eigentlich mit String.Empty auf sich?</title>
		<link>http://www.activesoft.de/2011/03/was-hat-es-eigentlich-mit-string-empty-auf-sich/</link>
		<comments>http://www.activesoft.de/2011/03/was-hat-es-eigentlich-mit-string-empty-auf-sich/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 16:44:38 +0000</pubDate>
		<dc:creator>tommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://www.activesoft.de/2011/03/was-hat-es-eigentlich-mit-string-empty-auf-sich/</guid>
		<description><![CDATA[Hin und wieder stösst man im Code auf String.Empty das gern statt “” genutzt wird. Auf Nachfrage teilte mir einer meiner Kollegen mit : ”Besser immer String.Empty benutzen – dies ist Performanter und String.Empty kann Betriebssystemspezifisch vom Compiler auf einen leeren String gesetzt werden” Da dachte ich mir: Klingt komisch – isses auch. Soviel zur [...]]]></description>
			<content:encoded><![CDATA[<p>Hin und wieder stösst man im Code auf String.Empty das gern statt “” genutzt wird. Auf Nachfrage teilte mir einer meiner Kollegen mit <em>:</em></p>
<p><em>”Besser immer String.Empty benutzen – dies ist Performanter und String.Empty kann Betriebssystemspezifisch vom Compiler auf einen leeren String gesetzt werden”</em></p>
<p>Da dachte ich mir: Klingt komisch – <strong>isses auch</strong>.</p>
<p>Soviel zur Vorgeschichte. Nun zu den Ergebnissen meiner Nachforschungen und Experimente.</p>
<p>In dem statischen Konstruktor der String Klasse wird der Empty Wert auch nur auf “” gesetzt. Also nix besonderes.</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:46c417c2-6527-48e8-8933-c173f6e6eae2" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<pre style="width: 453px; height: 60px; background-color: white; overflow: auto;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080;">1</span> <span style="color: #0000ff;">static</span><span style="color: #000000;"> </span><span style="color: #0000ff;">String</span><span style="color: #000000;">()
</span><span style="color: #008080;">2</span> <span style="color: #000000;">{
</span><span style="color: #008080;">3</span> <span style="color: #000000;">    Empty </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800000;">""</span><span style="color: #000000;">;
</span><span style="color: #008080;">4</span> <span style="color: #000000;">}</span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>Das bedeutet somit das String.Empty erst zur Laufzeit vom Framework gesetzt wird. Das hat wiederum Konsequenzen für die Verwendung in einem Switch da dieser nur auf Konstante Werte auswerten kann:</p>
<p><a href="http://www.activesoft.de/wordpress/wp-content/uploads/image.png"><img style="background-image: none; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://www.activesoft.de/wordpress/wp-content/uploads/image_thumb.png" border="0" alt="image" width="339" height="259" /></a></p>
<p>Hier kommt man also nicht drum herum “” zu verwenden.</p>
<p>Jetzt könnte man ja meinen: Ok statt dem Switch kann ich auch das IF Statement verwenden – da kann ich dann schön String.Empty einsetzen. Klar, kann man machen. IF Statements können aber im Gegensatz zu Switch einen deutlichen Performaceverlust führen denn komplexte Switches werden intern als Dictionary implementiert die je nach Situation sehr viel Performanter sein können als IF Conditions.</p>
<p>Aber gibt es im Allgemeinen einen Geschwindigkeitsunterschied? Dazu ein kleines Experiment</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:a9245172-1aad-42ff-9b21-6ea2650ed81f" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px;">
<pre style="width: 581px; height: 213px; background-color: white; overflow: auto;">
<div><!--

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--><span style="color: #008080;"> 1</span> <span style="color: #000000;">            Stopwatch stopWatch </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> Stopwatch();
</span><span style="color: #008080;"> 2</span> <span style="color: #000000;">            stopWatch.Start();
</span><span style="color: #008080;"> 3</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">long</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #800080;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;">&lt;</span><span style="color: #000000;"> </span><span style="color: #800080;">3000000000</span><span style="color: #000000;">; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)
</span><span style="color: #008080;"> 4</span> <span style="color: #000000;">            {
</span><span style="color: #008080;"> 5</span> <span style="color: #000000;">                </span><span style="color: #000000;">//</span><span style="color: #000000;">Dauer: </span><span style="color: #800080;">6076</span><span style="color: #000000;">
</span><span style="color: #008080;"> 6</span> <span style="color: #000000;">                </span><span style="color: #000000;">//</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #800000;">""</span><span style="color: #000000;"> </span><span style="color: #000000;">==</span><span style="color: #000000;"> null) { </span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> System.Exception(); }
</span><span style="color: #008080;"> 7</span> <span style="color: #000000;">
</span><span style="color: #008080;"> 8</span> <span style="color: #000000;">                </span><span style="color: #000000;">//</span><span style="color: #000000;">Dauer: </span><span style="color: #800080;">8150</span><span style="color: #000000;"> </span><span style="color: #000000;">-</span><span style="color: #000000;"> langsamer
</span><span style="color: #008080;"> 9</span> <span style="color: #000000;">                </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty  </span><span style="color: #000000;">==</span><span style="color: #000000;"> null) { </span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> System.Exception(); }
</span><span style="color: #008080;">10</span> <span style="color: #000000;">            }
</span><span style="color: #008080;">11</span> <span style="color: #000000;">            stopWatch.Stop();
</span><span style="color: #008080;">12</span> <span style="color: #000000;">            Console.WriteLine(stopWatch.ElapsedMilliseconds.ToString()   );
</span><span style="color: #008080;">13</span> <span style="color: #000000;">            Console.ReadLine();</span></div>
</pre>
<p><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --></p>
</div>
<p>Wie die folgende Analyse zeigt, kann der Compiler den Vergleich mit &#8220;&#8221; komplett entfernen.</p>
<p>﻿<a rel="attachment wp-att-36" href="http://www.activesoft.de/2011/03/was-hat-es-eigentlich-mit-string-empty-auf-sich/03-03/"><img class="alignnone size-medium wp-image-36" title="03.03" src="http://www.activesoft.de/wordpress/wp-content/uploads/03.03-255x300.png" alt="" width="255" height="300" /></a></p>
<p>Also unter dem Strich lasse ich mich zu der Aussage verleiten das String.Empty in <strong>weniger Fällen</strong> nutzbar (Switch) und auch <strong>langsamer</strong> ist als das String Literal “”.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.activesoft.de/2011/03/was-hat-es-eigentlich-mit-string-empty-auf-sich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

