<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Desarrollo .NET</title>
	<atom:link href="http://desarrollonet.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://desarrollonet.wordpress.com</link>
	<description>Trucos para dotNet Framework</description>
	<lastBuildDate>Wed, 03 Oct 2007 15:32:39 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='desarrollonet.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/d46c6df2d59ec73892d986ae0628ed6a?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Desarrollo .NET</title>
		<link>http://desarrollonet.wordpress.com</link>
	</image>
			<item>
		<title>Consejos sobre rendimiento en aplicaciones para dispositivos móviles</title>
		<link>http://desarrollonet.wordpress.com/2007/10/03/consejos-sobre-rendimiento-en-aplicaciones-para-dispositivos-moviles/</link>
		<comments>http://desarrollonet.wordpress.com/2007/10/03/consejos-sobre-rendimiento-en-aplicaciones-para-dispositivos-moviles/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 15:32:39 +0000</pubDate>
		<dc:creator>desarrollonet</dc:creator>
				<category><![CDATA[Compact Framework]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[compact framwork]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[rendimiento]]></category>

		<guid isPermaLink="false">http://desarrollonet.wordpress.com/2007/10/03/consejos-sobre-rendimiento-en-aplicaciones-para-dispositivos-moviles/</guid>
		<description><![CDATA[ Lejos del academicismo y las buenas maneras, cuando tenemos que liarnos a programar con prisas (o &#8220;picar código como un loco&#8221;), el rendimiento es algo que nos importa poco menos que nada. Tenemos máquinas y servidores con potencia suficiente para mover código altamente ineficiente. Ésta falta de eficiencia se nota preocupantemente en una aplicación [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=desarrollonet.wordpress.com&blog=1836587&post=4&subd=desarrollonet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;"> Lejos del academicismo y las buenas maneras, cuando tenemos que liarnos a programar con prisas (o &#8220;picar código como un loco&#8221;), el rendimiento es algo que nos importa poco menos que nada. Tenemos máquinas y servidores con potencia suficiente para mover código altamente ineficiente. Ésta falta de eficiencia se nota preocupantemente en una aplicación funcionando en un dispositivo móvil. Estamos hablando de equipos con procesador de bajo rendimiento y memoria limitada, lo que facilita enormemente la saturación de la memoria o la carga excesiva de proceso y, por lo tanto, lentitud.</p>
<p style="text-align:justify;"> ¿Alguna solución para mejorar el rendimiento? Bueno, repasemos algunos consejos y pautas a seguir para programar en Compact Framework de forma que nuestro código no supongo una patada en el núcleo de proceso al dispositivo móvil o a la memoria del mismo. Resumiré algunas, las que considero más importantes :</p>
<p style="text-align:justify;"><strong>- Evitar los métodos virtuales :</strong> Los métodos virtuales (<a href="http://msdn2.microsoft.com/es-es/library/9fkccyh4(VS.80).aspx">virtual</a>) son hasta un 40% más lentos en ejecución que un método estático (<a href="http://msdn2.microsoft.com/es-es/library/98f28cdx(VS.80).aspx">static</a>) o un método de instancia corriente. Esto se debe a que la Compact Framework interpreta directamente las llamadas en lugar de indizarlas en un VTABLE para evitar el coste de mantenimiento de la misma en memoria y ahorrar el espacio que supondrían ciertas llamadas a métodos que nunca se van a realizar. Cuando se tiene que hacer una llamada a un método virtual se recorre la jerarquía de clases, lo cual, aunque se mantenga una caché de llamadas, es un tanto engorroso. Tampoco pretendo decir que los métodos virtuales sean una tara importante para el rendimiento&#8230; lo serán cuando se trate de método que sean llamados con frecuencia en la aplicación.</p>
<p style="text-align:justify;"> <strong>- Evitar el uso de propiedades en las clases : </strong>Si empleamos las propiedades para hacer asignaciones y devoluciones de campos privados de la clase sin más&#8230; mejor que declaremos como público (<a href="http://msdn2.microsoft.com/es-es/library/yzh058ae(VS.80).aspx">public</a>) el campo. Las llamadas de asignación (<a href="http://msdn2.microsoft.com/es-es/library/yzh058ae(VS.80).aspx">set</a>) y devolución (<a href="http://msdn2.microsoft.com/es-es/library/ms228503(VS.80).aspx">get</a>) de las propiedades son métodos y requieren llamadas, lo cual será menos óptimo que acceder directamente al campo.</p>
<p style="text-align:justify;"> <strong>- Emplear variables de 32 bits : </strong>El JIT de la Compact Framework empleará los registros de la CPU cuando le sea posible para almacenar las variables locales y los parámetros de los métodos que sean de 32 bits. También se puede hacer esto con variables de 8 o 16 bits, pero en ocasiones resulta engorroso por la necesidad de realizar alguna que otra conversión. Al tener ya asignado registro en la memoria de la CPU, será mejor reutilizar una variable ya declarada que declarar una nueva.</p>
<p style="text-align:justify;"> <strong>- Efectuar llamadas manuales al colector de basura : </strong>El colector de basura o <a href="http://www.codeproject.com/dotnet/gcbyleslie.asp">GC</a> solo entre en acción cuando se detecta que el montón que se emplea en gestión de memoria está lleno ante la inserción de un nuevo elemento en memoria, cuando una aplicación va a finalizar o cuando se fuerza su ejecución mediante el método <a href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfSystemGCClassCollectTopic2.asp">Collect()</a>. Conviene emplear la última técnica citada para obligar a que el <a href="http://www.codeproject.com/dotnet/gcbyleslie.asp">GC</a> libere la memoria de aquellos objetos que se han dejado de utilizar. Conviene que en todas las clases implementemos la interfaz <a href="http://msdn2.microsoft.com/en-us/library/system.idisposable_members(VS.71).aspx">IDisposable</a>. Recordemos que las invocaciones al método <a href="http://msdn2.microsoft.com/en-us/library/system.idisposable.dispose(VS.71).aspx">Dispose()</a> no implican que el objeto sea completamente eliminado de la memoria, de ahí que sea conveniente forzar al <a href="http://www.codeproject.com/dotnet/gcbyleslie.asp">GC</a>. Conviene recordar que el <a href="http://www.codeproject.com/dotnet/gcbyleslie.asp">GC</a> se ejecuta en segundo plano y que su pesadez dependerá directamente de la cantidad de referencias a eliminar así como del tamaño del montón.</p>
<p style="text-align:justify;"> <strong>- Evitar emplear bucles <a href="http://msdn2.microsoft.com/es-es/library/ttw7t8t6(VS.80).aspx">foreach </a>: </strong>Este tipo de bucles que tan cómodos resultan al recorrer una colección resultan pesados en ejecución al tener que realizar varias llamadas a métodos de la clase <a href="http://msdn2.microsoft.com/en-us/library/system.collections.ienumerator.aspx">IEnumerator</a>. Siempre que podamos, debemos emplear bucles <a href="http://msdn2.microsoft.com/es-es/library/ch45axte(VS.80).aspx">for</a> o <a href="http://msdn2.microsoft.com/es-es/library/2aeyhxcd(VS.80).aspx">while</a>.</p>
<p>Esto refiere solo a algunos puntos a tener en cuenta. Por supuesto, hay muchísimas más técnicas y cuestiones a tener en cuenta. Os dejo un par de enlaces como referencia :</p>
<p><a href="http://blogs.msdn.com/netcfteam/archive/2005/05/04/414820.aspx">.NET CF version 2.0 Performance and Working Set FAQ</a></p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetcomp/html/netcfperf.asp">Performance in CF</a></p>
<p>Espero que le sirva de ayuda a alguien.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/desarrollonet.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/desarrollonet.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/desarrollonet.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/desarrollonet.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/desarrollonet.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/desarrollonet.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/desarrollonet.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/desarrollonet.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/desarrollonet.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/desarrollonet.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/desarrollonet.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/desarrollonet.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=desarrollonet.wordpress.com&blog=1836587&post=4&subd=desarrollonet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://desarrollonet.wordpress.com/2007/10/03/consejos-sobre-rendimiento-en-aplicaciones-para-dispositivos-moviles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1ae519a62e2d4d2d9f5ea3a1ff836f0?s=96&#38;d=identicon" medium="image">
			<media:title type="html">desarrollonet</media:title>
		</media:content>
	</item>
		<item>
		<title>Presentaciones</title>
		<link>http://desarrollonet.wordpress.com/2007/10/03/presentaciones/</link>
		<comments>http://desarrollonet.wordpress.com/2007/10/03/presentaciones/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 09:57:09 +0000</pubDate>
		<dc:creator>desarrollonet</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://desarrollonet.wordpress.com/2007/10/03/presentaciones/</guid>
		<description><![CDATA[
Este blog se ha empezado con la sana intención de echar un cable a todos aquellos que nos vemos involucrados en desarrollos con la dotNET Framework. Se intentarán abarcar todos los aspectos de la misma, así como exponer soluciones a los problemas más cotidianos y que, paradójicamente, son los más difíciles de localizar. Todo se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=desarrollonet.wordpress.com&blog=1836587&post=3&subd=desarrollonet&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p style="text-align:justify;">
Este blog se ha empezado con la sana intención de echar un cable a todos aquellos que nos vemos involucrados en desarrollos con la dotNET Framework. Se intentarán abarcar todos los aspectos de la misma, así como exponer soluciones a los problemas más cotidianos y que, paradójicamente, son los más difíciles de localizar. Todo se basa en compartir experiencias y, siempre que sea posible, hacer críticas constructivas sobre las manías que todos tenemos a la hora de programar.
</p>
<p>Gracias por vuestra atención.</p>
<p>Un saludo.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/desarrollonet.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/desarrollonet.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/desarrollonet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/desarrollonet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/desarrollonet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/desarrollonet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/desarrollonet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/desarrollonet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/desarrollonet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/desarrollonet.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/desarrollonet.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/desarrollonet.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=desarrollonet.wordpress.com&blog=1836587&post=3&subd=desarrollonet&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://desarrollonet.wordpress.com/2007/10/03/presentaciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d1ae519a62e2d4d2d9f5ea3a1ff836f0?s=96&#38;d=identicon" medium="image">
			<media:title type="html">desarrollonet</media:title>
		</media:content>
	</item>
	</channel>
</rss>