<?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>Codehauerei Schwarz &#187; Performance</title>
	<atom:link href="http://codehauerei-schwarz.de/tag/performance/feed/" rel="self" type="application/rss+xml" />
	<link>http://codehauerei-schwarz.de</link>
	<description>.NET SQL-Server &#38; more</description>
	<lastBuildDate>Mon, 28 Mar 2011 08:38:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SqlParameter.Add() vs AddWithValue()</title>
		<link>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/</link>
		<comments>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 18:33:05 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=209</guid>
		<description><![CDATA[Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben. Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest. using (var conn = new SqlConnection(@"ConnectionString zensiert")) { conn.Open();      string sql = "Select LastName FROM TestTable WHERE [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"></a>Der Großteil der Entwickler wird sich bei Datenbankabfragen sicher mit der Methode AddWithValue() angefreundet haben.</p>
<p>Man gibt nur noch den Namen des Sql-Parameters und den entsprechenden Wert an und das .Net Framework kümmert sich um den Rest.</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

      cmd.Parameters.AddWithValue("@l", "Harglgargl");
       //selbes Ergebnis
       //cmd.Parameters.Add("@l", "Meier");

       object res = cmd.ExecuteScalar();
}</pre>
<p>Ich würde erwarten, dass der SQL-Server schlau genug wäre und den Parameter korrekt auflöst.</p>
<p>Leider gibt es hier ein kleines Problem.</p>
<p>Führt man das Codefragment mit den Werten &#8220;Huber&#8221;, &#8220;Schmidt&#8221;, und &#8220;Harglgargl&#8221; aus würde man erwarten,</p>
<p>dass der SQL-Server einen bereits vorhandenen Ausführungsplan benutzt bzw. einen Plan für diese Abfrage erstellt und dann wiederverwendet.</p>
<p>Das Resultat sieht leider etwas anders aus:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png"><img class="alignnone size-full wp-image-213" title="SqlParameter_AddWithValue_1" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_1.png" alt="Cached Plans" width="573" height="306" /></a></p>
<p>Für jede Varchar-Länge wird ein eigener Ausführungsplan angelegt.</p>
<p>Die Auswirkungen werden bei einem genaueren Blick auf die Speicherausnutzung des SQL-Servers deutlich.</p>
<p>Mein Dev-Server sagt dazu auf jeden Fall Folgendes:</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png"><img class="alignnone size-full wp-image-215" title="SqlParameter_AddWithValue_2" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_2.png" alt="" width="182" height="76" /></a></p>
<p>Cached: verwendeter Speicher um Seiten zu cachen</p>
<p>Stolen: Speicher der &#8220;gestohlen&#8221; wird um Ausführungspläne zu cachen</p>
<p>Das Verhältnis wird in den meisten Szenarien vernachlässigbar sein. Ich kann mir allerdings einige Umgebungen vorstellen in denen das Ganze zum Problem werden könnte.</p>
<p>Wie dem auch sei. Je mehr Speicher zur Verfügung steht um Seiten zu cachen umso besser <img src='http://codehauerei-schwarz.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Die Lösung des Ganzen ist aktuell leider etwas umständlich. Man kann das Ganze umgehen indem man den Datentyp der entsprechenden Datenbankspalte angibt.</p>
<p>Leider ist das Ganze extrem lästig da es aktuell keine brauchbare Überladung gibt (Man kann sich natürlich eine schnitzen)&#8230;</p>
<pre class="brush:[c#]">using (var conn = new SqlConnection(@"ConnectionString zensiert"))
{
     conn.Open();

     string sql = "Select LastName FROM TestTable WHERE LastName = @l";

     var cmd = new SqlCommand(sql, conn);

     SqlParameter p = new SqlParameter("@l", System.Data.SqlDbType.VarChar, 1000);
     p.Value = "Huber";

     cmd.Parameters.Add(p);

     object res = cmd.ExecuteScalar();
}</pre>
<p> </p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png"><img class="alignnone size-full wp-image-218" title="SqlParameter_AddWithValue_3" src="http://codehauerei-schwarz.de/wp-content/uploads/2010/06/SqlParameter_AddWithValue_3.png" alt="" width="522" height="58" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2010/09/21/sqlparameter-add-vs-addwithvalue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF Performance Counter</title>
		<link>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/</link>
		<comments>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:00:39 +0000</pubDate>
		<dc:creator>Andreas Schwarz</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codehauerei-schwarz.de/?p=150</guid>
		<description><![CDATA[Das WCF-Framework stellt eine Unzahl an Meßwerten zur Verfügung. Leider ist das Ganze kaum dokumentiert&#8230; Die Aktivierung der Counter ist denkbar einfach (wenn man mal rausgefunden hat dass es sowas überhaupt gibt&#8230;) und erfolgt durch einen Eintrag in der App.Config des Hosts Die entsprechenden Werte lassen sich dann direkt mit perfmon anzeigen und auswerten.]]></description>
			<content:encoded><![CDATA[<p>Das WCF-Framework stellt eine Unzahl an Meßwerten zur Verfügung.</p>
<p>Leider ist das Ganze kaum dokumentiert&#8230;</p>
<p>Die Aktivierung der Counter ist denkbar einfach (wenn man mal rausgefunden hat dass es sowas überhaupt gibt&#8230;) und erfolgt durch einen Eintrag in der App.Config des Hosts</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/PerfCountersConfig.png"><img class="alignnone size-full wp-image-151" title="PerfCountersConfig" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/PerfCountersConfig.png" alt="PerfCountersConfig" width="362" height="49" /></a></p>
<p>Die entsprechenden Werte lassen sich dann direkt mit perfmon anzeigen und auswerten.</p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon1.png"><img class="alignnone size-full wp-image-152" title="perfmon1" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon1.png" alt="perfmon1" width="584" height="386" /></a></p>
<p><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png"><img class="alignnone size-full wp-image-154" title="perfmon2" src="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png" alt="perfmon2" width="461" height="532" /></a><a href="http://codehauerei-schwarz.de/wp-content/uploads/2009/11/perfmon2.png"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codehauerei-schwarz.de/2009/11/30/wcf-performance-counter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

