<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Komentáře k: Vytváření instancí předem neznámých tříd v C#</title>
	<atom:link href="http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/</link>
	<description>Osobní stránky jednoho podivného programátora...</description>
	<lastBuildDate>Fri, 09 Jul 2010 16:36:41 +0200</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5688</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Mon, 16 Nov 2009 18:20:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5688</guid>
		<description>Jen bych přidal ještě omezení &lt;em&gt;new()&lt;/em&gt; na generický parametr, aby byla zaručena existence bezparametrického konstruktoru ;-)</description>
		<content:encoded><![CDATA[<p>Jen bych přidal ještě omezení <em>new()</em> na generický parametr, aby byla zaručena existence bezparametrického konstruktoru <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: vlko</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5685</link>
		<dc:creator>vlko</dc:creator>
		<pubDate>Mon, 16 Nov 2009 14:20:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5685</guid>
		<description>no uz som otrava, ale neda mi este jedno genericke threadsafe riesenie s lambda a cachingom:)

&lt;pre class=&quot;Code&quot;&gt;public class LambdaFactory where T : class
{
   private static readonly Func&lt;T&gt; LambdaConstruction = Expression.Lambda&lt;Func&lt;T&gt;&gt;(
      Expression.New(typeof(T)), null).Compile();

   public static T Create()
   {
      return LambdaConstruction();
   }
}&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>no uz som otrava, ale neda mi este jedno genericke threadsafe riesenie s lambda a cachingom:)</p>
<pre class="Code">public class LambdaFactory where T : class
{
   private static readonly Func&lt;T&gt; LambdaConstruction = Expression.Lambda&lt;Func&lt;T&gt;&gt;(
      Expression.New(typeof(T)), null).Compile();

   public static T Create()
   {
      return LambdaConstruction();
   }
}</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5684</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Mon, 16 Nov 2009 13:44:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5684</guid>
		<description>Jo. A dost možná ještě pár dalších věcí, které jsem tím mým jednoduchým testem (ne)změřil :-) Nicméně když jsem zkusil přidat přetypování, tak jsem se u sebe signifikantní změny nedočkal.

Ve článku jsem chtěl hlavně ukázat, jaké existují možnosti a jaké jsou fakt výkonově špatné - což mě třeba u &lt;em&gt;new T()&lt;/em&gt; (kde &lt;em&gt;T&lt;/em&gt; je generický parametr) dost překvapilo.

Taky je asi zřejmý, že výkon není třeba řešit třeba v případě, kdy jde např. o vytvoření instance pluginu (jen jednotky instanciací během programu).

Inicializaci jednotlivých způsobů vytváření instancí jsem schválně neřešil - podnětem pro vznik článku bylo měření, které jsem si dělal kvůli jedné specifické situaci, kterou jsem musel řešit, což bylo vytváření hodně instancí několika málo tříd.</description>
		<content:encoded><![CDATA[<p>Jo. A dost možná ještě pár dalších věcí, které jsem tím mým jednoduchým testem (ne)změřil <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Nicméně když jsem zkusil přidat přetypování, tak jsem se u sebe signifikantní změny nedočkal.</p>
<p>Ve článku jsem chtěl hlavně ukázat, jaké existují možnosti a jaké jsou fakt výkonově špatné &#8211; což mě třeba u <em>new T()</em> (kde <em>T</em> je generický parametr) dost překvapilo.</p>
<p>Taky je asi zřejmý, že výkon není třeba řešit třeba v případě, kdy jde např. o vytvoření instance pluginu (jen jednotky instanciací během programu).</p>
<p>Inicializaci jednotlivých způsobů vytváření instancí jsem schválně neřešil &#8211; podnětem pro vznik článku bylo měření, které jsem si dělal kvůli jedné specifické situaci, kterou jsem musel řešit, což bylo vytváření hodně instancí několika málo tříd.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: vlko</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5683</link>
		<dc:creator>vlko</dc:creator>
		<pubDate>Mon, 16 Nov 2009 12:54:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5683</guid>
		<description>btw len tak pre zaujimavost ako sa este daju vytvarat objekty, tak windsor ma fastcreate [&lt;a href=&quot;http://svn.castleproject.org:8080/svn/castle/InversionOfControl/trunk/src/Castle.MicroKernel/ComponentActivator/DefaultComponentActivator.cs&quot; rel=&quot;nofollow&quot;&gt;link&lt;/a&gt;] pouziva nieco taketo:
&lt;pre class=&quot;Code&quot;&gt;
sw.Reset();
sw.Start();

ConstructorInfo cinfo = typeof(TestClass).GetConstructor(Type.EmptyTypes);
            
for (int i = 0; i &lt; instances; i++)
{
  var t = (TestClass)System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(TestClass));
  cinfo.Invoke(t, null);
}
sw.Stop();
report(&quot;windsor&quot;, sw.Elapsed);
&lt;/pre&gt;
co je pomalsie ako activator, ale nie nutne, treba mysliet tiez na to, ze pouzivame bezparametricke konstruktory</description>
		<content:encoded><![CDATA[<p>btw len tak pre zaujimavost ako sa este daju vytvarat objekty, tak windsor ma fastcreate [<a href="http://svn.castleproject.org:8080/svn/castle/InversionOfControl/trunk/src/Castle.MicroKernel/ComponentActivator/DefaultComponentActivator.cs" rel="nofollow">link</a>] pouziva nieco taketo:</p>
<pre class="Code">
sw.Reset();
sw.Start();

ConstructorInfo cinfo = typeof(TestClass).GetConstructor(Type.EmptyTypes);

for (int i = 0; i &lt; instances; i++)
{
  var t = (TestClass)System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(TestClass));
  cinfo.Invoke(t, null);
}
sw.Stop();
report(&quot;windsor&quot;, sw.Elapsed);
</pre>
<p>co je pomalsie ako activator, ale nie nutne, treba mysliet tiez na to, ze pouzivame bezparametricke konstruktory</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: vlko</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5682</link>
		<dc:creator>vlko</dc:creator>
		<pubDate>Mon, 16 Nov 2009 12:48:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5682</guid>
		<description>no urcite si zmeral to, ze Activator je archaicke riesenie, ktore sa by som urcite neodporucal pouzivat a skor isiel bud cestou CIL, co je to najrychlejsie riesenie, alebo cestou lambda (tu treba mysliet na to, ze bez cachovania scompilovanej funkcie ide o najpomalsie riesenie).

Teraz som sa tak zamyslel, tak ake vysledky by asi test daval, ak by si necachoval konstrutor, lambdu pripaden dynamic metodu, ale volal vzdy cely kod?

A k ctor.Invoke(null) a creator() testu by som mal poznamku, pretoze vidim, ze pouzivas var, tak si si vedomy, ze vracias object a pre typovu bezpecnost je potrebne pretypovanie, co uz z nich take vykonne riesenie nerobi:)</description>
		<content:encoded><![CDATA[<p>no urcite si zmeral to, ze Activator je archaicke riesenie, ktore sa by som urcite neodporucal pouzivat a skor isiel bud cestou CIL, co je to najrychlejsie riesenie, alebo cestou lambda (tu treba mysliet na to, ze bez cachovania scompilovanej funkcie ide o najpomalsie riesenie).</p>
<p>Teraz som sa tak zamyslel, tak ake vysledky by asi test daval, ak by si necachoval konstrutor, lambdu pripaden dynamic metodu, ale volal vzdy cely kod?</p>
<p>A k ctor.Invoke(null) a creator() testu by som mal poznamku, pretoze vidim, ze pouzivas var, tak si si vedomy, ze vracias object a pre typovu bezpecnost je potrebne pretypovanie, co uz z nich take vykonne riesenie nerobi:)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5681</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Mon, 16 Nov 2009 11:20:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5681</guid>
		<description>&lt;em&gt;expression.Compile()&lt;/em&gt; by tohle omezení mít nemělo - používá se např. v ASP.NET MVC, který se běžně nasazuje na hostinzích. Docela mi to dává smysl - pomocí emitování člověk může vygenerovat pěkný blbosti, ale při sestavování lambda expression má dost svázané ruce, takže nemůže napáchat tolik škody :)

Co se týče rychlosti, tak pokud se neliší řádově, tak bych se jí spíš neřídil a vybral si to, co mi víc vyhovuje. Taky těžko říct, co jsme vlastně změřili ;-)</description>
		<content:encoded><![CDATA[<p><em>expression.Compile()</em> by tohle omezení mít nemělo &#8211; používá se např. v ASP.NET MVC, který se běžně nasazuje na hostinzích. Docela mi to dává smysl &#8211; pomocí emitování člověk může vygenerovat pěkný blbosti, ale při sestavování lambda expression má dost svázané ruce, takže nemůže napáchat tolik škody <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Co se týče rychlosti, tak pokud se neliší řádově, tak bych se jí spíš neřídil a vybral si to, co mi víc vyhovuje. Taky těžko říct, co jsme vlastně změřili <img src='http://www.augi.cz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: vlko</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5680</link>
		<dc:creator>vlko</dc:creator>
		<pubDate>Mon, 16 Nov 2009 10:42:51 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5680</guid>
		<description>to augi: na mojom pc ten rozdiel nebol az taky vyrazny a mimochodom emitovanie kodu podlieha ReflectedPermission, co by teoreticky (nemam odskusane) lambda nemala. Na to treba mysliet najma pri nasadeni aplikacie napr na hosting server.</description>
		<content:encoded><![CDATA[<p>to augi: na mojom pc ten rozdiel nebol az taky vyrazny a mimochodom emitovanie kodu podlieha ReflectedPermission, co by teoreticky (nemam odskusane) lambda nemala. Na to treba mysliet najma pri nasadeni aplikacie napr na hosting server.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5679</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Mon, 16 Nov 2009 10:05:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5679</guid>
		<description>Díky moc :) Doplnil jsem článek i o tuhle možnost vytváření instancí. Je to určitě pěknější zápis než generováni CILu, jen škoda, že je (aspoň u mě) o chlup pomalejší...</description>
		<content:encoded><![CDATA[<p>Díky moc <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Doplnil jsem článek i o tuhle možnost vytváření instancí. Je to určitě pěknější zápis než generováni CILu, jen škoda, že je (aspoň u mě) o chlup pomalejší&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: vlko</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5677</link>
		<dc:creator>vlko</dc:creator>
		<pubDate>Sun, 15 Nov 2009 21:14:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5677</guid>
		<description>caf, zabudol si este na jeden sposob, vyuzitie Expression:
            var lambda = Expression.Lambda&lt;Func&gt;(
                Expression.New(typeof (TestClass)),
                null
                ).Compile();
            for (int i = 0; i &lt; instances; i++)
            {
                var t = lambda();
            }
            sw.Stop();
            report(&quot;lamda&quot;, sw.Elapsed);

vyzera to viac sexy ako emit, nie?:)</description>
		<content:encoded><![CDATA[<p>caf, zabudol si este na jeden sposob, vyuzitie Expression:<br />
            var lambda = Expression.Lambda&lt;Func&gt;(<br />
                Expression.New(typeof (TestClass)),<br />
                null<br />
                ).Compile();<br />
            for (int i = 0; i &lt; instances; i++)<br />
            {<br />
                var t = lambda();<br />
            }<br />
            sw.Stop();<br />
            report(&quot;lamda&quot;, sw.Elapsed);</p>
<p>vyzera to viac sexy ako emit, nie?:)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Od: Augi</title>
		<link>http://www.augi.cz/programovani/vytvareni-instanci-predem-neznamych-trid-v-c/comment-page-1/#comment-5674</link>
		<dc:creator>Augi</dc:creator>
		<pubDate>Fri, 13 Nov 2009 21:59:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.augi.cz/?p=409#comment-5674</guid>
		<description>To je pravda :) O tom měla tak trochu být i ta poslední věta :) Vědět to člověk nemusí, ale když ho zajímá, co se děje na pozadí...</description>
		<content:encoded><![CDATA[<p>To je pravda <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  O tom měla tak trochu být i ta poslední věta <img src='http://www.augi.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Vědět to člověk nemusí, ale když ho zajímá, co se děje na pozadí&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
