<?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>Comments on: Wydajność GDI w .NET Compact Framework &#8211; rysowanie napisów</title>
	<atom:link href="http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/feed/" rel="self" type="application/rss+xml" />
	<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/</link>
	<description>Programista praktyczny</description>
	<lastBuildDate>Sat, 31 Jul 2010 09:52:34 +0200</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Jakub Florczyk</title>
		<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/comment-page-1/#comment-843</link>
		<dc:creator>Jakub Florczyk</dc:creator>
		<pubDate>Fri, 07 Aug 2009 06:42:02 +0000</pubDate>
		<guid isPermaLink="false">http://jakubflorczyk.pl/?p=190#comment-843</guid>
		<description>&lt;a href=&quot;#comment-784&quot; rel=&quot;nofollow&quot;&gt;@Grzegorz Aksamit&lt;/a&gt; 
&quot;Z głową&quot; mam na myśli jak najmniejsze obiekty i tylko te rzadko zmieniane. Wiem że to nie argument ale aplikacje .NET i tak są pamięciożerne, więc nawet +0.5MB nie robi im różnicy jeśli się przekłada na użyteczność.
Tak czy inaczej ja tylko pokazuje jedną z metod, która wg. mojej opinii jest użyteczna; jeśli inni tak nie uważają to nie muszą jej przecież używać :)
W Pocket Blip użyta jest powyższa metoda i mimo wzrostu zużycia pamięci +20% zadowolenie użytkowników wzrosło +100% :)

Na koniec polecam wszystkim przeciwnikom zrobić mały test: wyrysować pokolorowany tekst (tak jak na statusie blipa gdzie pokolorowane są tagi, linki, użytkownicy) przy pomocy DrawString a potem zrobić płynnego scrolla po ekranie.</description>
		<content:encoded><![CDATA[<p><a href="#comment-784" rel="nofollow">@Grzegorz Aksamit</a><br />
&#8220;Z głową&#8221; mam na myśli jak najmniejsze obiekty i tylko te rzadko zmieniane. Wiem że to nie argument ale aplikacje .NET i tak są pamięciożerne, więc nawet +0.5MB nie robi im różnicy jeśli się przekłada na użyteczność.<br />
Tak czy inaczej ja tylko pokazuje jedną z metod, która wg. mojej opinii jest użyteczna; jeśli inni tak nie uważają to nie muszą jej przecież używać <img src='http://jakubflorczyk.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
W Pocket Blip użyta jest powyższa metoda i mimo wzrostu zużycia pamięci +20% zadowolenie użytkowników wzrosło +100% <img src='http://jakubflorczyk.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Na koniec polecam wszystkim przeciwnikom zrobić mały test: wyrysować pokolorowany tekst (tak jak na statusie blipa gdzie pokolorowane są tagi, linki, użytkownicy) przy pomocy DrawString a potem zrobić płynnego scrolla po ekranie.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Grzegorz Aksamit</title>
		<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/comment-page-1/#comment-784</link>
		<dc:creator>Grzegorz Aksamit</dc:creator>
		<pubDate>Mon, 03 Aug 2009 09:17:46 +0000</pubDate>
		<guid isPermaLink="false">http://jakubflorczyk.pl/?p=190#comment-784</guid>
		<description>&lt;a href=&quot;#comment-668&quot; rel=&quot;nofollow&quot;&gt;@Jakub Florczyk&lt;/a&gt; 
Możesz rozwinąć co masz na myśli mówiąc &quot;z głową&quot;? 
Obiekty typu Bitmap w .NET CF są strasznie pamięciożerne - nawet po załadowaniu z pliku JPG - w pamięci i tak trzymana jest bitmapa. Zakładając rozmiar ekranu taki jak np w HTC Touch HD (480x800), na prosty nagłówek ekranu powiedzmy 400x50 marnujemy od razu 80kB (dobrze licze?) A to tylko jedna z wielu grafik w aplikacji. 

Usuwanie tego cache i tworzenie go na nowo też nie wydaje się do końca dobrym pomysłem.
Garbage Collector w .NET CF jest dość prymitywny - nie śledzi dziur w stercie które powstają w wyniku niszczenia obiektów. Jeśli tworzymy obiekty A B i C sterta wygląda w przybliżeniu tak: &#124;A&#124;B&#124;C&#124; Jeśli teraz zniszczymy obiekt B i utworzymy D to sterta wygląda tak: &#124;A&#124; &#124;C&#124;D&#124; itd. Jedynie raz na jakiś czas GC wykonuje tzw. heap compaction, gdzie przeczesuje całą stertę w poszukiwaniu dziur a następnie przesuwa wszystkie obiekty po stercie tak, żeby nie było dziur - a to jak wiadomo strasznie czasochłonna i zamulająca operacja. Chyba jeszcze gorsza niż rysowanie tych tekstów DrawString()-iem. Ale do tego trzeba by wykonać więcej testów.</description>
		<content:encoded><![CDATA[<p><a href="#comment-668" rel="nofollow">@Jakub Florczyk</a><br />
Możesz rozwinąć co masz na myśli mówiąc &#8220;z głową&#8221;?<br />
Obiekty typu Bitmap w .NET CF są strasznie pamięciożerne &#8211; nawet po załadowaniu z pliku JPG &#8211; w pamięci i tak trzymana jest bitmapa. Zakładając rozmiar ekranu taki jak np w HTC Touch HD (480&#215;800), na prosty nagłówek ekranu powiedzmy 400&#215;50 marnujemy od razu 80kB (dobrze licze?) A to tylko jedna z wielu grafik w aplikacji. </p>
<p>Usuwanie tego cache i tworzenie go na nowo też nie wydaje się do końca dobrym pomysłem.<br />
Garbage Collector w .NET CF jest dość prymitywny &#8211; nie śledzi dziur w stercie które powstają w wyniku niszczenia obiektów. Jeśli tworzymy obiekty A B i C sterta wygląda w przybliżeniu tak: |A|B|C| Jeśli teraz zniszczymy obiekt B i utworzymy D to sterta wygląda tak: |A| |C|D| itd. Jedynie raz na jakiś czas GC wykonuje tzw. heap compaction, gdzie przeczesuje całą stertę w poszukiwaniu dziur a następnie przesuwa wszystkie obiekty po stercie tak, żeby nie było dziur &#8211; a to jak wiadomo strasznie czasochłonna i zamulająca operacja. Chyba jeszcze gorsza niż rysowanie tych tekstów DrawString()-iem. Ale do tego trzeba by wykonać więcej testów.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jakub Florczyk</title>
		<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/comment-page-1/#comment-668</link>
		<dc:creator>Jakub Florczyk</dc:creator>
		<pubDate>Mon, 29 Jun 2009 09:43:44 +0000</pubDate>
		<guid isPermaLink="false">http://jakubflorczyk.pl/?p=190#comment-668</guid>
		<description>&lt;a href=&quot;#comment-667&quot; rel=&quot;nofollow&quot;&gt;@Uno&lt;/a&gt; 

Faktycznie nie napisałem jak mierzyłem i na jakim sprzęcie, bo tak jak napisałem we wpisie chodzi mi o proporcję a nie konkretne wyniki.
Masz rację, że w przypadku &quot;bardzo&quot; dynamicznego tekstu, który często się zmienia cache jakikolwiek nie ma sensu. To jest przykład cache dla tekstów które się rzadko zmieniają i wbrew pozorom zużycie pamięci nie skacze dramatycznie jeżeli użyje się go &quot;z głową&quot;.</description>
		<content:encoded><![CDATA[<p><a href="#comment-667" rel="nofollow">@Uno</a> </p>
<p>Faktycznie nie napisałem jak mierzyłem i na jakim sprzęcie, bo tak jak napisałem we wpisie chodzi mi o proporcję a nie konkretne wyniki.<br />
Masz rację, że w przypadku &#8220;bardzo&#8221; dynamicznego tekstu, który często się zmienia cache jakikolwiek nie ma sensu. To jest przykład cache dla tekstów które się rzadko zmieniają i wbrew pozorom zużycie pamięci nie skacze dramatycznie jeżeli użyje się go &#8220;z głową&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Uno</title>
		<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/comment-page-1/#comment-667</link>
		<dc:creator>Uno</dc:creator>
		<pubDate>Mon, 29 Jun 2009 06:20:19 +0000</pubDate>
		<guid isPermaLink="false">http://jakubflorczyk.pl/?p=190#comment-667</guid>
		<description>Chyba przesadziles z ta wydajnoscia. Przede wszystkim nie napisales jak mierzyles tzn ile razy narysowales ten string i na jakim sprzecie. Ja nie wyobrazam sobie tworzenie cacha dla kazdego stringu (marnujemy RAM) zwlaszcza jak masz rysowanie warunkowe czyli np zmieniasz kolor stringa w zaleznosci od jakiegos parametru no i uzywanie cacha jest bardzo niewygodne i wprowadza niepotrzebne komplikacje w kodzie.</description>
		<content:encoded><![CDATA[<p>Chyba przesadziles z ta wydajnoscia. Przede wszystkim nie napisales jak mierzyles tzn ile razy narysowales ten string i na jakim sprzecie. Ja nie wyobrazam sobie tworzenie cacha dla kazdego stringu (marnujemy RAM) zwlaszcza jak masz rysowanie warunkowe czyli np zmieniasz kolor stringa w zaleznosci od jakiegos parametru no i uzywanie cacha jest bardzo niewygodne i wprowadza niepotrzebne komplikacje w kodzie.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dotnetomaniak.pl</title>
		<link>http://jakubflorczyk.pl/index.php/2009/06/26/wydajnosc-gdi-w-net-compact-framework-rysowanie-napisow/comment-page-1/#comment-666</link>
		<dc:creator>dotnetomaniak.pl</dc:creator>
		<pubDate>Fri, 26 Jun 2009 12:09:10 +0000</pubDate>
		<guid isPermaLink="false">http://jakubflorczyk.pl/?p=190#comment-666</guid>
		<description>&lt;strong&gt;Wydajność GDI w .NET Compact Framework ? rysowanie napisów...&lt;/strong&gt;

Dziękujemy za publikację - Trackback z dotnetomaniak.pl...</description>
		<content:encoded><![CDATA[<p><strong>Wydajność GDI w .NET Compact Framework ? rysowanie napisów&#8230;</strong></p>
<p>Dziękujemy za publikację &#8211; Trackback z dotnetomaniak.pl&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
