<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ponte : .net</title><link>http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx</link><description>Tags: .net</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Regreso a las bases: Memoria (Parte 2)</title><link>http://msmvps.com/blogs/gflores/archive/2009/12/15/regreso-a-las-bases-memoria-parte-2.aspx</link><pubDate>Wed, 16 Dec 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1745878</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1745878</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2009/12/15/regreso-a-las-bases-memoria-parte-2.aspx#comments</comments><description>&lt;p&gt;Lo que sigue es una traducci&amp;oacute;n de una secci&amp;oacute;n del ebook gratuito &lt;a href="http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx"&gt;&lt;span style="color:#006bad;"&gt;Foundations of Programming&lt;/span&gt;&lt;/a&gt; de &lt;a href="http://codebetter.com/blogs/karlseguin/"&gt;&lt;span style="color:#006bad;"&gt;Karl Seguin&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 style="margin:10pt 0in 0pt;"&gt;&lt;a name="_Toc205295082"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Cambria;color:#4f81bd;font-size:small;"&gt;Apuntadores&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Para muchos desarrolladores, aprender sobre apuntadores en la escuela fue una experiencia dolorosa. Representan la verdaderamente real indirecci&amp;oacute;n que existe entre c&amp;oacute;digo y hardware. Muchos m&amp;aacute;s desarrolladores nunca tuvieron la experiencia de aprender sobre ellos&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;- saltaron directamente a programar en un lenguaje que no los expone directamente. La verdad sin embargo es que cualquiera que diga que C# o Java son lenguajes sin apuntadores es simplemente un error. Como los apuntadores son el mecanismo con el cual todos los lenguajes almacenan valores en el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt;, es m&amp;aacute;s bien tonto no entender como son usados.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Los apuntadores representan el nexus del modelo de memoria de un sistema &amp;ndash; esto es, los apuntadores son el mecanismo donde el &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt; y el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; trabajan juntos para proveer el subsistema de memoria requerido por su programa. Como discutimos anteriormente, cuando instancia un objeto &lt;/span&gt;&lt;/span&gt;&lt;span class="InlineCodeChar"&gt;&lt;span lang="ES" style="line-height:115%;font-size:10pt;mso-ansi-language:ES;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-bidi-font-size:11.0pt;"&gt;&lt;span style="font-family:Courier New;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;, .NET asigna un bloque de memoria al &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; y regresa un apuntador al inicio de este bloque de memoria. Esto es todo lo que un apuntador es: &lt;b style="mso-bidi-font-weight:normal;"&gt;la direcci&amp;oacute;n de inicio para el bloque de memoria que contiene un objeto&lt;/b&gt;. La direcci&amp;oacute;n no es nada m&amp;aacute;s que un n&amp;uacute;mero &amp;uacute;nico, generalmente representado en formato hexadecimal. Por lo tanto, un apuntador no es nada m&amp;aacute;s que un n&amp;uacute;mero &amp;uacute;nico que le dice a .NET donde est&amp;aacute; el objeto mismo en memoria. Esta indirecci&amp;oacute;n es transparente en Java o .NET, pero no en C o C++ donde se puede manipular la direcci&amp;oacute;n de memoria directamente con un apuntador aritm&amp;eacute;tico. En C o C++ se puede tomar un apuntador y agregar 1 a &amp;eacute;l, y as&amp;iacute; arbitrariamente cambiar a donde est&amp;aacute; apuntando (y seguramente hacer tronar el programa debido a esto).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Donde se pone interesante es donde el apuntador est&amp;aacute; realmente almacenado. Ellos en realidad siguen las mismas reglas descritas arriba: como enteros son almacenados en el &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt; &amp;ndash; al menos, claro, que ellos formen parte de una referencia a un objeto y entonces estar&amp;aacute;n en el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; con el resto del objeto. Puede no ser claro a&amp;uacute;n, pero esto significa que ultimadamente, todos los objetos &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; est&amp;aacute;n enraizados al &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt; (posiblemente a trav&amp;eacute;s de numerosos niveles de referencias). Veamos primero este ejemplo simple:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-bottom:#1f497d 2.25pt solid;border-left:medium none;padding-bottom:10pt;padding-left:0in;padding-right:0in;background:#f2f2f2;border-top:#1f497d 2.25pt solid;border-right:medium none;padding-top:10pt;mso-background-themecolor:background1;mso-background-themeshade:242;mso-border-top-themecolor:text2;mso-border-bottom-themecolor:text2;mso-element:para-border-div;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="CodeKeyword"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="color:#003399;"&gt;static&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-MX"&gt; &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;void&lt;/span&gt;&lt;/span&gt; Main(&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;string&lt;/span&gt;&lt;/span&gt;[] args)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;int&lt;/span&gt;&lt;/span&gt; x = 5;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;string&lt;/span&gt;&lt;/span&gt; y = &amp;quot;&lt;span class="CodeString"&gt;&lt;span style="color:#984806;"&gt;codebetter.com&lt;/span&gt;&lt;/span&gt;&amp;quot;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpLast"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Del c&amp;oacute;digo de arriba, terminaremos con 2 valores en el &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt;, el entero 5 y el apuntador a nuestra cadena, as&amp;iacute; como tambi&amp;eacute;n precisamente el valor en el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt;. Aqu&amp;iacute; una representaci&amp;oacute;n gr&amp;aacute;fica:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/7838.stackheap.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/7838.stackheap.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;Cuando salimos de nuestra function main (olvid&amp;eacute;monos del hecho de que el programa se parar&amp;aacute;), nuestro &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt; liberar&amp;aacute; todos los valores locales, lo que significa que tanto el valor de x como de y se perder&amp;aacute;n. Esto es significativo porque la memoria asignada en el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; todav&amp;iacute;a contiene nuestra cadena, pero hemos perdido toda referencia a ella (no hay alg&amp;uacute;n apuntador apunt&amp;aacute;ndola). En C o C++ esto resulta en una fuga de memoria &amp;ndash; sin una referencia a nuestra direcci&amp;oacute;n en el &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; no podemos liberarla de la memoria). En C# o Java, nuestro confiable recolector de basura detectar&amp;aacute; el objeto sin referencia y lo liberar&amp;aacute;.&lt;/span&gt;&lt;span lang="ES-MX" style="mso-no-proof:yes;mso-fareast-language:EN-CA;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;mso-no-proof:yes;mso-fareast-language:EN-CA;"&gt;&lt;span style="font-size:small;"&gt;&lt;span style="font-family:Calibri;"&gt;Veremos ejemplos m&amp;aacute;s complejos, que aparte de tener m&amp;aacute;s flechas apuntando, es b&amp;aacute;sicamente el mismo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="border-bottom:#1f497d 2.25pt solid;border-left:medium none;padding-bottom:10pt;padding-left:0in;padding-right:0in;background:#f2f2f2;border-top:#1f497d 2.25pt solid;border-right:medium none;padding-top:10pt;mso-background-themecolor:background1;mso-background-themeshade:242;mso-border-top-themecolor:text2;mso-border-bottom-themecolor:text2;mso-element:para-border-div;"&gt;
&lt;p class="CodeCxSpFirst"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="color:#003399;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;class&lt;/span&gt;&lt;/span&gt; Empleado&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;private&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;int&lt;/span&gt;&lt;/span&gt; _empleadoId;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;private&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeType"&gt;&lt;span style="color:#31849b;"&gt;Empleado&lt;/span&gt;&lt;/span&gt; _gerente;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;int&lt;/span&gt;&lt;/span&gt; EmpleadoId&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;get&lt;/span&gt;&lt;/span&gt; { &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;return&lt;/span&gt;&lt;/span&gt; _empleadoId; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;set&lt;/span&gt;&lt;/span&gt; { _empleadoId = value; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;public&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeType"&gt;&lt;span style="color:#31849b;"&gt;Empleado&lt;/span&gt;&lt;/span&gt; Gerente&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;get&lt;/span&gt;&lt;/span&gt; { &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;return&lt;/span&gt;&lt;/span&gt; _gerente; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;set&lt;/span&gt;&lt;/span&gt; { _gerente = value; }&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;public&lt;/span&gt;&lt;/span&gt; Empleado(&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;int&lt;/span&gt;&lt;/span&gt; empleadoId)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_empleadoId = empleadoId;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="color:#003399;"&gt;public class&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; Prueba&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-MX"&gt;private&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="CodeType"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="color:#31849b;"&gt; Empleado&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-MX"&gt; _subordinado;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span class="CodeKeyword"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="color:#003399;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;void &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES-MX"&gt;HacerAlgo()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="CodeType"&gt;&lt;span style="color:#31849b;"&gt;Empleado&lt;/span&gt;&lt;/span&gt; jefe = &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;new&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeType"&gt;&lt;span style="color:#31849b;"&gt;Empleado&lt;/span&gt;&lt;/span&gt;(1);&lt;br /&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;_subordinado = &lt;span class="CodeKeyword"&gt;&lt;span style="color:#003399;"&gt;new&lt;/span&gt;&lt;/span&gt; &lt;span class="CodeType"&gt;&lt;span style="color:#31849b;"&gt;Empleado&lt;/span&gt;&lt;/span&gt;(2);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;_subordinado.Gerente = _jefe;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpMiddle"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-size:x-small;"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="CodeCxSpLast"&gt;&lt;span lang="ES-MX"&gt;&lt;span style="font-family:Courier New;font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" align="center"&gt;&lt;span style="mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/4300.stackheappointers.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/gflores/4300.stackheappointers.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Interesantemente, cuando salimos de nuestro m&amp;eacute;todo, la variable jefe se liberar&amp;aacute; del &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt;, pero el subordinado, que est&amp;aacute; definido por el alcance padre, no. Esto significa que el recolector de basura no tendr&amp;aacute; nada que limpiar porque los dos valores del &lt;i style="mso-bidi-font-style:normal;"&gt;heap&lt;/i&gt; seguir&amp;aacute;n siendo referenciados (uno directamente del &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt;, y el otro indirectamente del &lt;i style="mso-bidi-font-style:normal;"&gt;stack&lt;/i&gt; a trav&amp;eacute;s del objeto referenciado.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="ES" style="mso-ansi-language:ES;"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;Como puede ver, los apuntadores definitivamente juegan una parte importante tanto en C# como en VB.NET. Como el apuntador aritm&amp;eacute;tico no est&amp;aacute; disponible en ninguno de estos lenguajes, los apuntadores son grandemente simplificados y con suerte f&amp;aacute;cilmente entendidos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1745878" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category></item><item><title>Regreso a las bases: Memoria</title><link>http://msmvps.com/blogs/gflores/archive/2009/12/14/regreso-a-las-bases-memoria.aspx</link><pubDate>Mon, 14 Dec 2009 17:08:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1745558</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1745558</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2009/12/14/regreso-a-las-bases-memoria.aspx#comments</comments><description>&lt;p&gt;Lo que sigue es una traducci&amp;oacute;n de una secci&amp;oacute;n del ebook gratuito &lt;a href="http://codebetter.com/blogs/karlseguin/archive/2008/06/24/foundations-of-programming-ebook.aspx"&gt;Foundations of Programming&lt;/a&gt; de &lt;a href="http://codebetter.com/blogs/karlseguin/"&gt;Karl Seguin&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Regreso a las bases: Memoria&lt;/h4&gt;
&lt;p&gt;Por m&amp;aacute;s que se intente, los lenguajes modernos de programaci&amp;oacute;n no pueden abstraer completamente los aspectos fundamentales de los sistemas computacionales. Por ejemplo, podemos asumir que usted se ha encontrado con las siguientes excepciones .NET: NullReferneceException, OutOfMemoryException, StackOverflowException y ThreadAbortException. Tan importante como es para desarrolladores adopter varios patrones y t&amp;eacute;cnicas de alto nivel, es igualmente importante comprender el ecosistema en el cual su programa se ejecuta. Mirando por encima de las capas prove&amp;iacute;das por el compilar de C# (o VB.NET), el CLR y el sistema operativo, nos encontramos con la memoria. Todos los programas hacen uso extensivo de la memoria del sistema e interaccionan con ella en maravillas maneras, es dif&amp;iacute;cil ser un buen programador sin comprender esta interacci&amp;oacute;n fundamental.&lt;br /&gt;Mucha de la confusi&amp;oacute;n sobre la memoria nace del hecho de que tanto C# y VB.NET son lenguajes administrados y que el CLR provee la recolecci&amp;oacute;n autom&amp;aacute;tica de basura. Esto ha causado que muchos desarrolladores asuman err&amp;oacute;neamente que no necesitan preocuparse por la memoria.&lt;/p&gt;
&lt;h4&gt;Asignaci&amp;oacute;n de Memoria&lt;/h4&gt;
&lt;p&gt;En .NET, como en muchos otros lenguajes, cada variable que se defina est&amp;aacute; almacenada en el stack&amp;nbsp; o en el heap . Estos son dos espacios separados asignados en la memoria de sistema que sirven un prop&amp;oacute;sito distinto, aunque complementario. Lo que va donde est&amp;aacute; predeterminado: valores de tipos van en el stack, mientras que la referencia a tipos va en el heap. En otras palabras, todos los tipos de sistema, como char, int, long, byte, enum y cualquier estructura (ya sean definidas por.NET o por usted) van en el stack. La &amp;uacute;nica excepci&amp;oacute;n a esta regla son los valores de tipos que pertenecen a referencias de tipos &amp;ndash; por ejemplo la propiedad Id de una clase User va en el heap junto con la instancia de la clase User misma.&lt;/p&gt;
&lt;h4&gt;El Stack&lt;/h4&gt;
&lt;p&gt;Aunque estamos acostumbrados al m&amp;aacute;gico colector de basura, los valores en el stack son autom&amp;aacute;ticamente administrados a&amp;uacute;n en un mundo sin colector de basura (como en C). Esto es porque cuando sea que entramos a un nuevo alcance (como un m&amp;eacute;todo o una sentencia If) los valores son empujados al stack y cuando salen del stack los valores son liberados. Esta es la raz&amp;oacute;n por la que un stack es sin&amp;oacute;nimo a LIFO - last-in first-out (&amp;uacute;ltimo en entrar primero en salir). Puede pensarlo en este modo: cuando se crea un nuevo alcance, por ejemplo un m&amp;eacute;todo, un marcador es puesto en el stack y los valores son a&amp;ntilde;adidos como se necesiten. Cuando se deja ese alcance, todos los valores son liberados incluyendo el marcador del m&amp;eacute;todo. Esto funciona en cualquier nivel de anidado.&lt;br /&gt;Hasta que veamos la interacci&amp;oacute;n entre el heap y el stack, la &amp;uacute;nica manera real de meterse en problemas con el stack es con StackOverflowException. Esto significa que ha usado todo el espacio disponible del stack. 99.9% del tiempo, esto indica una llamada recursiva interminable (una funci&amp;oacute;n que se llama a s&amp;iacute; misma ad infinitum). En teor&amp;iacute;a esto puede ser causado por un muy muy mal dise&amp;ntilde;o de sistema, aunque nunca he visto una llamada&amp;nbsp; no recursiva usando todo el espacio del stack.&lt;/p&gt;
&lt;h4&gt;El Heap&lt;/h4&gt;
&lt;p&gt;La asignaci&amp;oacute;n de memoria en el heap no es tan simple como el stack. La mayor&amp;iacute;a de la asignaci&amp;oacute;n de memoria basada en el heap ocurre cuando creamos un objeto new. El compilador averigua cuanta memoria necesitaremos (lo cual no es tan dif&amp;iacute;cil, a&amp;uacute;n con objetos con referencias anidadas), toma un apropiado mont&amp;oacute;n de memoria y regresa el apuntador a la memoria asignada (m&amp;aacute;s acerca de esto en un momento). El ejemplo m&amp;aacute;s sencillo es una cadena, si cada car&amp;aacute;cter en una cadena toma 2 bytes, y creamos una nueva cadena con el valor de &amp;ldquo;Hola Mundo&amp;rdquo;, entonces el CLR necesitar&amp;aacute; asignar 22 bytes (11x2) m&amp;aacute;s cualquier adicional necesitado.&lt;br /&gt;Hablando de cadenas, seguramente ha o&amp;iacute;do que las cadenas son inmutables &amp;ndash; esto es, una vez que ha sido declarada una cadena y asignado un valor, si se modifica esa cadena (cambiando el valor o concatenando otra cadena a ella), entonces una nueva cadena se crea. Esto realmente puede tener implicaciones de rendimiento negativas, y por ello la recomendaci&amp;oacute;n general es usar un StringBuilder para cualquier manipulaci&amp;oacute;n de cadenas significativa. La verdad es que cualquier objeto almacenado en el heap es inmutable con respecto a la asignaci&amp;oacute;n de tama&amp;ntilde;o, y cualquier cambio en el tama&amp;ntilde;o subyacente requerir&amp;aacute; una nueva asignaci&amp;oacute;n. El StringBuilder, junto con algunas colecciones, parcialmente pueden sacar la vuelta a esto usando buffers internos. Una vez que el buffer se llena, la misma reasignaci&amp;oacute;n ocurre y alg&amp;uacute;n tipo de algoritmo de crecimiento es usado para determinar el nuevo tama&amp;ntilde;o (el m&amp;aacute;s simple siendo antiguoTama&amp;ntilde;o * 2). Siempre que sea posible es buena idea especificar la capacidad inicial de dichos objetos para evitar este tipo de reasignaci&amp;oacute;n (el constructor para tanto el StringBuilder y el&amp;nbsp; ArrayList (entre muchas otras colecciones) le permiten especificar capacidad inicial). &lt;br /&gt;Recolectar basura del heap es una tarea no trivial. A diferencia del stack donde el &amp;uacute;ltimo alcance puede simplemente liberarlo, los objetos del heap no son locales a un determinado alcance. En lugar de ello, la mayor&amp;iacute;a son referencias profundamente anidadas de otros objetos referenciados. En lenguajes como en C, cuando un programador causa que la memoria sea asignada al heap, debe asegurarse tambi&amp;eacute;n de remover del heap cuando ha terminado con &amp;eacute;l. En lenguajes administrados, el motor en tiempo de ejecuci&amp;oacute;n se encarga de limpiar los recursos (.NET usa un Recolector de Basura Generacional que est&amp;aacute; brevemente descrito en la Wikipedia).&lt;br /&gt;Hay muchos incidentes horribles que pueden molestar a los desarrolladores mientras trabajan con el heap. Fugas de memoria no solo son posibles sino muy comunes, la fragmentaci&amp;oacute;n de memoria puede causar todo tipo de caos, y varios problemas de rendimiento pueden generarse gracias a comportamiento de asignaci&amp;oacute;n extra&amp;ntilde;o o interacci&amp;oacute;n con c&amp;oacute;digo sin administrar (lo cual .NET hace mucho debajo del agua). &lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1745558" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category></item><item><title>Windows Azure</title><link>http://msmvps.com/blogs/gflores/archive/2008/10/27/windows-azure.aspx</link><pubDate>Tue, 28 Oct 2008 00:41:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1652158</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1652158</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2008/10/27/windows-azure.aspx#comments</comments><description>&lt;p&gt;La espera por fin termin&amp;oacute; y &lt;a href="http://microsoft.com/azure" target="_blank"&gt;Windows Azure&lt;/a&gt; vi&amp;oacute; la luz este lunes 27 de octubre de 2008 en el &lt;a href="http://microsoftpdc.com/" target="_blank"&gt;Professional Developers Conference&lt;/a&gt; de Los Angeles. &amp;iquest;Y porqu&amp;eacute; es tan importante? Pues son los servicios de internet que prove&amp;eacute; Microsoft en sus Datacenters (que por ah&amp;iacute; se dice que son visibles desde el espacio exterior &lt;a href="http://www.bbc.co.uk/blogs/technology/2008/10/the_town_in_the_cloud.html" target="_blank"&gt;por lo enormes que son&lt;/a&gt;). Todos ellos basados en un esfuerzo de interoperabilidad y flexibilidad que permitir&amp;aacute;n a tus aplicaciones coexistir en la red en lo denominado Computaci&amp;oacute;n en la Nube (cloud computing) donde se ven m&amp;aacute;s los desarrollos como algo que es aprovechable a trav&amp;eacute;s de la red y no importando los dispositivos que uses para accederlos. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://i18.photobucket.com/albums/b116/gfr20/servicesPlatform.jpg?t=1225137235" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Hay bastantes cosas interesantes en la Plataforma de Servicios Azure adem&amp;aacute;s de aquellas que ya eran aprovechables (como Live Services para consumir y explotar la plataforma Windows Live), me refiero a .NET Services con servicios para manejo de Workflows y Bus de servicios y otros, as&amp;iacute; como SQL Services que no es m&amp;aacute;s que SQL Data Services para poder tener todos tus datos en tiempo real para terceros y para el resto de tus aplicaciones.&lt;/p&gt;
&lt;p&gt;Habr&amp;aacute; mucho m&amp;aacute;s que aventurar en aprender sobre Windows Azure, pero una cosa es cierta, los desarrollos de software &lt;b&gt;ya&lt;/b&gt; deben considerar el consumo de su funcionalidad en un &amp;aacute;mbito global y de uso en cualquier dispositivo.&lt;/p&gt;
&lt;p&gt;M&amp;aacute;s info:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://microsoft.com/azure" target="_blank"&gt;Windows Azure&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/jaimesb/archive/2008/10/27/ray-ozzie-keynote-en-el-pdc.aspx"&gt;Opini&amp;oacute;n de Jaime S&amp;aacute;nchez&lt;/a&gt; de Microsoft&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/blogs/haarongonzalez/archive/2008/10/28/1652264.aspx"&gt;Haar&amp;oacute;n Gonz&amp;aacute;lez&lt;/a&gt; tiene algo que decir tambi&amp;eacute;n&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/luisdans/archive/2008/10/29/octubre-29-2008-azure-un-cielo-con-claridad-y-sin-l-mites.aspx"&gt;Preguntas contestadas&lt;/a&gt; sobre Azure de Luis Daniel Soto&lt;/p&gt;
&lt;p&gt;Descargas:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=130232" target="_blank"&gt;Windows Azure SDK&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=128752" target="_blank"&gt;Windows Azure Tools for Microsoft Visual Studio&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=129448" target="_blank"&gt;Microsoft .NET Services SDK &lt;/a&gt;    &lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=129449" target="_blank"&gt;Microsoft SQL Data Services SDK&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Bonus:&lt;/p&gt;
&lt;p&gt;.NET tiene un nuevo logo:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://i18.photobucket.com/albums/b116/gfr20/image_3.png" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1652158" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx">tecnolog&amp;#237;a</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/opini_26002300_243_3B00_n/default.aspx">opini&amp;#243;n</category></item><item><title>Visual Studio Express 2008 liberado</title><link>http://msmvps.com/blogs/gflores/archive/2007/11/19/visual-studio-express-2008-liberado.aspx</link><pubDate>Mon, 19 Nov 2007 20:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1336559</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=1336559</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/11/19/visual-studio-express-2008-liberado.aspx#comments</comments><description>&lt;p&gt;Ya están disponibles las &lt;a href="http://www.microsoft.com/express/product/default.aspx"&gt;versiones Express&lt;/a&gt; de &lt;a href="http://go.microsoft.com/?linkid=7653518"&gt;Visual C#&lt;/a&gt;, &lt;a href="http://go.microsoft.com/?linkid=7653517"&gt;Visual Basic .NET&lt;/a&gt;, &lt;a href="http://go.microsoft.com/?linkid=7653520"&gt;Visual C++&lt;/a&gt; y &lt;a href="http://go.microsoft.com/?linkid=7653519"&gt;Visual WebDeveloper 2008&lt;/a&gt;. Y tiene de interesante bastantes mejoras que puedes encontrar en Visual Studio 2008 (&lt;a href="http://mario-chavez.blogspot.com/2007/11/visual-studio-2008-y-net-framework-35.html"&gt;que también liberó su RTM&lt;/a&gt;), como son:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Desarrollo de aplicaciones con &lt;a href="http://wpf.netfx3.com/"&gt;WPF&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Aplicaciones con SQL Server Compact Edition&lt;/li&gt; &lt;li&gt;LINQ integrado (también con intellisense)&lt;/li&gt; &lt;li&gt;Mayor integración con &lt;a href="http://popfly.ms"&gt;Popfly&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Toolkit de desarrollo &lt;a href="http://www.microsoft.com/express/samples/c4fp2p/default.aspx"&gt;P2P para Vista&lt;/a&gt;&lt;/li&gt;&lt;a href="http://www.microsoft.com/express/samples/C4FP2P/"&gt;&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/express/samples/facebook/default.aspx"&gt;Developer kit&lt;/a&gt; para &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://www.microsoft.com/express/images/screenshots/VCS_Data_small.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Y mucho más. &lt;a href="http://www.microsoft.com/express/product/default.aspx"&gt;Descarga&lt;/a&gt; la versión que más te guste, &lt;a href="http://msdn2.microsoft.com/en-us/beginner/default.aspx"&gt;aprende lo nuevo&lt;/a&gt; y empieza a crear tus mejores aplicaciones.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1336559" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wpf/default.aspx">wpf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/vb.net/default.aspx">vb.net</category></item><item><title>.NET Framework 3.0</title><link>http://msmvps.com/blogs/gflores/archive/2007/04/17/net-framework-3-0.aspx</link><pubDate>Tue, 17 Apr 2007 19:56:29 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:822794</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=822794</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/04/17/net-framework-3-0.aspx#comments</comments><description>&lt;p&gt;Esta versión se incorpora al .NET Framework 2.0 y combina este marco de trabajo con nuevas tecnologías para crear:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Experiencias de usuario visualmente atractivas  &lt;li&gt;Comunicación interoperable confiable  &lt;li&gt;Modelos de procesos de negocio&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Siendo una evolución del .NET Framework, proveé una experiencia de desarrollo consistente y familiar para millones de desarrolladores que programan en este ambiente.&lt;/p&gt; &lt;p&gt;Para lograr estos objetivos, se tiene:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Presentation Foundation (WPF)&lt;/strong&gt;, provee clases para construir aplicaciones cliente de siguiente generación que combinan interfaz de usuario, documentos y medios.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Workflow Foundation (WF)&lt;/strong&gt;, con un modelo de programación, motor y herramientas para construir aplicaciones habilitadas para flujos de trabajo que modelan procesos de negocio.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Communication Foundation (WCF)&lt;/strong&gt;, un modelo de pogramación unificado para construir aplicaciones orientados a servicios.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Microsoft Windows Cardspace (antes InfoCard)&lt;/strong&gt;, tecnología para simplificar y mejorar la seguridad al acceder a recursos y compartir información personal de identidad en línea.&lt;/p&gt; &lt;p&gt;&lt;a href="http://msmvps.com/blogs/gflores/WindowsLiveWriter/.NETFramework3.0_B579/aa663309.20180_dotnet3%5B1%5D%5B3%5D.gif"&gt;&lt;img height="82" src="http://msmvps.com/blogs/gflores/WindowsLiveWriter/.NETFramework3.0_B579/aa663309.20180_dotnet3%5B1%5D_thumb%5B1%5D.gif" width="240"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Espera en las próximas entradas un poco más de detalle de estos componentes del .NET Framework 3.0.&lt;/p&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=822794" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx">tecnolog&amp;#237;a</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wpf/default.aspx">wpf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wwf/default.aspx">wwf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wcf/default.aspx">wcf</category></item><item><title>Referencias para .NET 3.0</title><link>http://msmvps.com/blogs/gflores/archive/2007/03/22/referencias-para-net-3-0.aspx</link><pubDate>Thu, 22 Mar 2007 20:53:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:702177</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=702177</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2007/03/22/referencias-para-net-3-0.aspx#comments</comments><description>&lt;p&gt;Algunas ligas útiles para desarrollo de aplicaciones con .NET 3.0:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/windowsvista/default.aspx"&gt;Windows Vista Developer Center&lt;/a&gt; &lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=10cc340b-f857-4a14-83f5-25634c3bf043&amp;amp;DisplayLang=en" title=".NET 3.0 download"&gt;.NET 3.0&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663300.aspx"&gt;Windows Presentation Foundation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663299.aspx"&gt;Windows Communication Foundation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/netframework/aa663308.aspx"&gt;Windows Workflow Foundation&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Para empezar a desarrollar:&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7614FE22-8A64-4DFB-AA0C-DB53035F40A0"&gt;Windows SDK&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en"&gt;Visual Studio 2005 Extensions for WWF&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en"&gt;Visual Studio 2005 Extensions for WCF &amp;amp; WPF&lt;/a&gt; &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ejemplos, demos y código:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms741723.aspx"&gt;Windows Workflow Foundation Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fms771449.aspx&amp;amp;ei=zu4CRprgGKL8ggOliKHxDA&amp;amp;usg=__cUydTuyf5YcUHwbqpV1omk9QHMA=&amp;amp;sig2=MMbIvDyt3nLjxDYnUUEujw"&gt;Getting started with WPF Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms751514.aspx"&gt;Windows Communication Foundation Samples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Webcast: Building a Sudoku Game Using Windows Presentation Foundation &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294938&amp;amp;Culture=en-US"&gt;Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294955&amp;amp;Culture=en-US"&gt;Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294957&amp;amp;Culture=en-US"&gt;Part 3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032294959&amp;amp;Culture=en-US"&gt;Part 4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032294962%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;Part 5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=702177" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/nivel_3A00_100/default.aspx">nivel:100</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/howto/default.aspx">howto</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wpf/default.aspx">wpf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wwf/default.aspx">wwf</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/wcf/default.aspx">wcf</category></item><item><title>Visual Studio Express: GRATIS indefinidamente</title><link>http://msmvps.com/blogs/gflores/archive/2006/04/20/91849.aspx</link><pubDate>Thu, 20 Apr 2006 19:00:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:91849</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=91849</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/04/20/91849.aspx#comments</comments><description>&lt;font face="Verdana" size="2"&gt;Esta es una excelente &lt;a href="http://blogs.msdn.com/danielfe/archive/2006/04/19/579109.aspx"&gt;noticia&lt;/a&gt;, los productos &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;Express de Visual Studio&lt;/a&gt; han sido anunciados como "GRATIS" por tiempo indefinido. ¿A qué se debe esto? Originalmente la licencia era gratuita por un año a partir noviembre 7 de 2005, pero gracias a que estas versiones han sido descargadas más de &lt;a href="http://blogs.msdn.com/danielfe/archive/2006/04/19/579109.aspx"&gt;5 millones de veces&lt;/a&gt; se ha decidido que &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;Visual Studio Express&lt;/a&gt; será gratis y continuará gratis (prácticamente, para siempre).&lt;br&gt;&lt;br&gt;¿Qué esperas? Descarga tu &lt;a href="http://msdn.microsoft.com/vstudio/express/"&gt;Visual Studio Express&lt;/a&gt; y ya que estás en esto, regístrate para ganar 10,000 dólares en el concurso &lt;a href="http://www.madeinexpresscontest.com/"&gt;Made In Express&lt;/a&gt;.&lt;/font&gt;&lt;br&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=91849" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/tecnolog_26002300_237_3B00_a/default.aspx">tecnolog&amp;#237;a</category></item><item><title>¿Porqué C#?</title><link>http://msmvps.com/blogs/gflores/archive/2006/04/17/91412.aspx</link><pubDate>Mon, 17 Apr 2006 15:51:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:91412</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=91412</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/04/17/91412.aspx#comments</comments><description>&lt;font size="1"&gt;&lt;i&gt;(con dedicatoria especial para &lt;a href="http://ww.elguille.info"&gt;elGuille&lt;/a&gt;)&lt;br&gt;&lt;br&gt;&lt;/i&gt;&lt;font face="Tahoma"&gt;&lt;font size="2"&gt;Un tema recurrente en los primeros episodios del &lt;a href="http://podcast.pozotecnico.com/"&gt;Pozo Técnico&lt;/a&gt; era la pregunta obligada "¿VB.NET o C#?" Con este framework, a partir del 1.0 yo respondo con un "¿con cuál te sientes más agusto?" puesto que con estos lenguajes ya no vale la justificación de que "VB no es Orientado a Objetos" ni el "es que es más difícil programar Windows con C++" y todo se reduce a un "es que a mí me gusta más los puntos y comas" y "a mí me gusta más definir todo con Begins y Ends".&lt;br&gt;&lt;br&gt;Estos dos lenguajes terminan usando el .NET Framework por lo que dependen más del framework que de la semántica con la que están hechos. Entonces, conociendo bien el .NET Framework puedes usar cualquier lenguaje que lo implemente sólamente buscando las peculiaridades o linduras de su propia sintaxis. En todo caso con Visual Studio .NET 2003 sí tienes diferencias importantes en el IDE cuando usas VB.NET o C# (¿cómo hacerle el feo al edit-and-continue?) pero con un ambiente de desarrollo más integrado que tienes en Visual Studio 2005, es más cuestión de gustos que otra cosa. &lt;br&gt;&lt;br&gt;A mí me gusta C# porque como le decía a El Guille, me gusta delimitar con llaves { }, me gusta más teclear así col[1] que así col(1), y poner punto y coma después de cada línea (aunque programadores VB.NET digan que esto es complicarse la vida). Pero en fin, otras razones más se expresan más claro en estos artículos:&lt;br&gt;&lt;br&gt;&lt;a href="http://www.elguille.info/NET/dotnet/vbvscs.htm"&gt;¿Qué elegir: VB .NET o C#?&lt;/a&gt; en &lt;a href="http://www.elguille.info/"&gt;El Guille&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/voices/MTJ_2128.asp"&gt;¿Visual Basic .NET ó C#?&lt;/a&gt; por Mario Félix Guerrero en &lt;a href="http://www.microsoft.com/spanish/msdn/comunidad/mtj.net/"&gt;MSDN&lt;/a&gt;&lt;br&gt;&lt;br&gt;Aunque espérate, una razón más amplia para decidirte por C# es por ejemplo los &lt;a href="http://msdn.microsoft.com/vcsharp/2005/overview/language/generics/"&gt;Generics&lt;/a&gt; y lo que está a vuelta de la esquina con &lt;a href="http://msdn.microsoft.com/vcsharp/future/"&gt;C# 3.0.&lt;/a&gt;&lt;br&gt;&lt;br&gt;Pero bueno, como te decía antes, lo que tú elijas debes sacarle el mejor provecho siempre.&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=91412" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/opini_26002300_243_3B00_n/default.aspx">opini&amp;#243;n</category></item><item><title>¿Porqué .NET?</title><link>http://msmvps.com/blogs/gflores/archive/2006/04/09/90033.aspx</link><pubDate>Sun, 09 Apr 2006 22:40:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:90033</guid><dc:creator>Gabriel Flores</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/gflores/rsscomments.aspx?PostID=90033</wfw:commentRss><comments>http://msmvps.com/blogs/gflores/archive/2006/04/09/90033.aspx#comments</comments><description>Frameworks van y frameworks vienen, pero el esfuerzo que te toca a tí hacer para aprender lo nuevo y evaluar a que lado irte es algo invaluable que agradecerás cuando tomes tu propia decisión. 
&lt;p&gt;
El .NET Framework representó para mí un marco de trabajo que realmente tiene organizadas las cosas como a mí me gustan usarlas, donde todo (hasta los tipos de dato) son clases, un mundo de conectividad lista para usarse y preocuparte por lo que realmente importa, lo que tu desarrollo hace.
&lt;p&gt;
Súmale la disposición de miles de desarrolladores en todo el mundo dispuestos no solo a apoyarte a aprender más, sino también a discutir e influir en los nuevos desarrollos, pues te toca estar en un ambiente donde te da más seguridad la herramienta que usas.
&lt;p&gt;
Al final del día, tú escojerás lo que mejor te sirva a tus intereses. Y tu trabajo será lo que demuestre que realmente escojiste siempre la mejor opción.&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=90033" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/gflores/archive/tags/.net/default.aspx">.net</category><category domain="http://msmvps.com/blogs/gflores/archive/tags/opini_26002300_243_3B00_n/default.aspx">opini&amp;#243;n</category></item></channel></rss>