C#

57
Teoría de Lenguajes Teoría de Lenguajes

Transcript of C#

Page 1: C#

Teoría de LenguajesTeoría de Lenguajes

Page 2: C#

Integrantes:◦Garcia , Guillermo◦Goszi, Hernán◦Piñol, Juan Pablo

Page 3: C#

IntroducciónIntroducción C# ("C Sharp") es un lenguaje de programación orientado a

objetos de propósito general.

Fue diseñado, desarrollado y estandarizado por Microsoft Corporation como parte de su plataforma .NET.

Sus principales creadores fueron Scott Wiltamuth y Anders Hejlsberg, éste último también conocido por haber sido el diseñador del lenguaje Turbo Pascal y la herramienta RAD Delphi.

La sintaxis y estructuración de C# deriva del C y C++, utiliza el modelo de objetos de la plataforma .NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi).

En resumen, C# es un lenguaje de programación que toma las mejores características de lenguajes preexistentes como C++, Visual Basic o Java y las combina en uno solo.

Page 4: C#

IntroducciónIntroducción C#, como parte de la plataforma.NET, está normalizado por

ECMA Internacional (European Computer Manufacturers Association International) desde diciembre de 2001 (ECMA-334 "Especificación del Lenguaje C#").

El 7 de noviembre de 2005 salió la versión 2.0 del lenguaje que incluía mejoras tales como tipos genéricos, métodos anónimos, iteradores, tipos parciales y tipos anulables.

El 19 de noviembre de 2007 salió la versión 3.0 destacando entre las mejoras los tipos implícitos, tipos anónimos y el LINQ (Language Integrated Query).

El 11 de agosto del 2008 salio, junto a la versión 3.5 de .NET, el C# 2008.

Page 5: C#

IntroducciónIntroducción Existen dos versiones sobre el origen del nombre del

lenguaje:

La oficial dice que la intención original de los creadores fue llamarlo "C en re bemol", para denotar belleza e inteligencia en el diseño de tal lenguaje. Debido a que se encontró parecido el símbolo "numeral" al correspondiente de Do sostenido mayor, el nombre del lenguaje quedó como C#.

Otra versión dice que en realidad surgió de superponer dos veces el símbolo ++ : ++

++ = #, obviamente en referencia al lenguaje C++.

Page 6: C#

Principales características de C#Principales características de C# SencillezSencillez: C# elimina muchos elementos que otros lenguajes

incluyen y que son innecesarios en .NET.

o El código escrito en C# es autocontenido, lo que significa que no necesita de archivos adicionales al propio fuente tales como archivos de cabecera o archivos IDL.

o El tamaño de los tipos de datos básicos es fijo e independiente del compilador, sistema operativo o máquina para quienes se compile (a diferencia de C++), lo que facilita la portabilidad del código.

o No se incluyen elementos considerados poco útiles de lenguajes como C++ tales como macros, herencia múltiple o la necesidad de un operador diferente del punto (.) para acceder a miembros de espacios de nombres (::) .

Page 7: C#

Principales características de C#Principales características de C# ModernidadModernidad: C# incorpora en el propio lenguaje elementos que a lo

largo de los años se ha demostrado son muy útiles para el desarrollo de aplicaciones y que en otros lenguajes como Java o C++ hay que simular .

o Como un tipo básico decimal que permita realizar operaciones de alta precisión con reales de 128 bits (muy útil en el mundo financiero).

o La inclusión de una instrucción foreach que permita recorrer colecciones con facilidad y es ampliable a tipos definidos por el usuario .

o La inclusión de un tipo básico string para representar cadenas o la distinción de un tipo bool específico para representar valores lógicos

Page 8: C#

Principales características de C#Principales características de C# Orientación a ObjetosOrientación a Objetos: C# es un lenguaje orientado a objetos puro,

aunque eso es más bien una característica del CTS (Common Type System o Sistema de Tipo Común) que de C#.

C# soporta todas las características propias del paradigma de programación orientada a objetos: encapsulamiento, herencia y polimorfismo.

Una diferencia de este enfoque orientado a objetos respecto al de otros lenguajes como C++ es que el de C# es más puro en tanto que no admiten ni funciones ni variables globales sino que todo el código y datos han de definirse dentro de definiciones de tipos de datos, lo que reduce problemas por conflictos de nombres y facilita la legibilidad del código.

Page 9: C#

Principales características de C#Principales características de C# Orientación a componentesOrientación a componentes: La propia sintaxis de C# incluye

elementos propios del diseño de componentes que otros lenguajes tienen que simular mediante construcciones más o menos complejas.

Es decir, la sintaxis de C# permite definir cómodamente propiedades (similares a campos de acceso controlado), eventos (asociación controlada de funciones de respuesta a notificaciones) o atributos (información sobre un tipo o sus miembros).

Page 10: C#

Principales características de C#Principales características de C# Gestión Automática de MemoriaGestión Automática de Memoria: Todo lenguaje de .NET tiene a su

disposición el recolector de basura del CLR.

Esto tiene el efecto en el lenguaje de que no es necesario incluir instrucciones de destrucción de objetos. Sin embargo, dado que la destrucción de los objetos a través del recolector de basura es indeterminista y sólo se realiza cuando éste se active -ya sea por falta de memoria, finalización de la aplicación o solicitud explícita en el fuente-,

C# también proporciona un mecanismo de liberación de recursos determinista a través de la instrucción using.

Page 11: C#

Principales características de C#Principales características de C# Seguridad de tiposSeguridad de tipos: C# incluye mecanismos que permiten asegurar

que los accesos a tipos de datos siempre se realicen correctamente, lo que evita que se produzcan errores difíciles de detectar por acceso a memoria no perteneciente a ningún objeto, lo que es especialmente necesario en un entorno gestionado por un recolector de basura.

Instrucciones segurasInstrucciones seguras: Para evitar errores muy comunes, en C# se han impuesto una serie de restricciones en el uso de las instrucciones de control más comunes.

Por ejemplo, la guarda de toda condición ha de ser una expresión condicional y no aritmética, con lo que se evitan errores por confusión del operador de igualdad (==) con el de asignación (=); y todo caso de un switch ha de terminar en un break o goto que indique cuál es la siguiente acción a realizar, lo que evita la ejecución accidental de casos y facilita su reordenación.

Page 12: C#

Principales características de C#Principales características de C# Sistema de tipos unificadoSistema de tipos unificado: A diferencia de C++, en C# todos los

tipos de datos que se definan siempre derivarán, aunque sea de manera implícita, de una clase base común llamada System.Object, por lo que dispondrán de todos los miembros definidos en ésta clase (es decir, serán "objetos").

Extensibilidad de tipos básicosExtensibilidad de tipos básicos: C# permite definir, a través de estructuras, tipos de datos para los que se apliquen las mismas optimizaciones que para los tipos de datos básicos. Se puedan almacenar directamente en pila (luego su creación, destrucción y acceso serán más rápidos) y se asignen por valor y no por referencia. Para conseguir que lo último no tenga efectos negativos al pasar estructuras como parámetros de métodos, se da la posibilidad de pasar referencias a pila a través del modificador de parámetro ref.

Page 13: C#

Principales características de C#Principales características de C# Extensibilidad de operadoresExtensibilidad de operadores: Para facilitar la legibilidad del código y

conseguir que los nuevos tipos de datos básicos que se definan a través de las estructuras estén al mismo nivel que los básicos predefinidos en el lenguaje, al igual que C++ y a diferencia de Java, C# permite redefinir el significado de la mayoría de los operadores -incluidos los de conversión, tanto para conversiones implícitas como explícitas- cuando se apliquen a diferentes tipos de objetos.

EficienteEficiente: En principio, en C# todo el código incluye numerosas restricciones para asegurar su seguridad y no permite el uso de punteros. Sin embargo, y a diferencia de Java, en C# es posible saltarse dichas restricciones manipulando objetos a través de punteros. Para ello basta marcar regiones de código como inseguras (modificador unsafe) y podrán usarse en ellas punteros de forma similar a cómo se hace en C++, lo que puede resultar vital para situaciones donde se necesite una eficiencia y velocidad procesamiento muy grandes.

Page 14: C#

Principales características de C#Principales características de C# VersionableVersionable: C# incluye una política de versionado que permite

crear nuevas versiones de tipos sin temor a que la introducción de nuevos miembros provoquen errores difíciles de detectar en tipos hijos previamente desarrollados y ya extendidos con miembros de igual nombre a los recién introducidos.

o Se obliga a que toda redefinición deba incluir el modificador override. Para evitar que por accidente un programador incluya este modificador, sólo se permite incluirlo en miembros que tengan la misma signatura que miembros marcados como “redefinibles” mediante el modificador virtual. Así además se evita el error tan frecuente en Java de creerse haber redefinido un miembro, pues si el miembro con override no existe en la clase padre se producirá un error de compilación.

o Si no se considera redefinición, entonces se considera que lo que se desea es ocultar el método de la clase padre, de modo que para la clase hija sea como si nunca hubiese existido. El compilador avisará de esta decisión a través de un “warning” que puede suprimirse incluyendo el modificador new en la definición del miembro en la clase hija para así indicarle explícitamente la intención de ocultación.

Page 15: C#

Principales características de C#Principales características de C# CompatibleCompatible: Para facilitar la migración de programadores, C# no

sólo mantiene una sintaxis muy similar a C, C++ o Java que permite incluir directamente en código escrito en C# fragmentos de código escrito en estos lenguajes, sino que el CLR también ofrece, a través de los llamados Platform Invocation Services (PInvoke), la posibilidad de acceder a código nativo escrito como funciones sueltas no orientadas a objetos tales como las DLLs de la API Win32.

También es posible acceder desde código escrito en C# a objetos COM. Finalmente, también se da la posibilidad de usar controles ActiveX desde código .NET y viceversa.

Page 16: C#

Estructura de la maquinaEstructura de la maquinasubyacentesubyacente

Temario La Plataforma .NET Common Language Runtime (CLR) Common Language Infrastructure (CLI) Base Class Library Assemblies Microsoft Intermediate Language (MSIL) or Common

Intermediate Language (CIL)

Page 17: C#

La plataforma .net nace para competir con la plataforma Java. Diseñado para el desarrollo de componentes de software utilizando cualquier lenguaje de programación. La Plataforma .NET esta compuesta por tres componentes: CLR, BCL y los lenguajes de programación. Existen varios compiladores de multiples lenguajes para la plataforma .net: Visual Basic .NET, C#, Managed C++, Oberon, Component Pascal, Eiffel, Smalltalk, Cobol, Fortran, Scheme, Mercury, Mondrian/Haskell, Perl, Python, SML.NET Las normas ECMA-335 e ISO/IEC 23271 definen el conjunto de funciones que debe implementar la biblioteca de clases base (BCL por sus siglas en inglés).

La Plataforma .NETLa Plataforma .NET

Page 18: C#

Common Language RuntimeCommon Language Runtime

Ejecución multiplataforma Integración de lenguajes Modelo de programación consistente Gestión de memoria Seguridad de tipos Aislamiento de procesos Tratamiento de excepciones Soporte multihilo Distribución transparente Seguridad avanzada

El Common Language Runtime (CLR) es el núcleo de la plataforma .NET ya que es el encargado de gestionar la ejecución de código compilado para la plataforma .NET. La CLR provee:

Page 19: C#

CLR y CLICLR y CLIEs la implementación del Standard Common Language Infrastructure (CLI) de Microsoft. (Las normas ECMA-335 e ISO/IEC 23271)

Existen implementaciones libres de la norma: Mono Portable .NET

La especificación del CLI describe los siguientes aspectos: Common Type System (CTS): Un conjunto de tipos y operaciones que son compartidas por todos los lenguajes que aplican la norma. Metadata: Información para interoperatividad entre lenguajes. Common Language Specification (CLS): Es un conjunto de características de lenguaje básicas requeridas por la mayoría de las aplicaciones. Virtual Execution System (VES): Carga y ejecuta aplicaciones CLI-Compatibles, usando la metadata para unir las piezas de código.

Page 20: C#

Base Class Library (BCL)Base Class Library (BCL)La biblioteca de clases de .Net Framework incluye, entre otros, tres componentes clave:

* ASP.NET para construir aplicaciones y servicios Web. * Windows Forms para desarrollar interfaces de usuario. * ADO.NET para conectar las aplicaciones a bases de datos.

La forma de organización de la Biblioteca es a travez de los “namespaces”.

La principal ventaja de los espacios de nombres de .Net es que de esta forma se tiene toda la bliblioteca de clases de .Net centralizada bajo el mismo espacio de nombres (System)

Page 21: C#

BaseBase Class Library (BCL)Class Library (BCL)

Page 22: C#

Lenguaje C#Lenguaje C#

Page 23: C#

AssembliesAssemblies Los ensamblados son ficheros con forma de EXE o DLL que contienen toda la funcionalidad de la aplicación de forma encapsulada.

Page 24: C#
Page 25: C#

MSILMicrosoft Intermediate LanguageMicrosoft Intermediate LanguageTambién conocido como CIL.

Page 26: C#

Diagrama CompletoDiagrama Completo

Page 27: C#

Definición de ClasesDefinición de Clases La sintaxis básica para definir una clase es la siguiente:

class <nombreClase>{

 <miembros>}

Ejemplo:

class Persona {   string Nombre;// Campo de cada objeto Persona que

// almacena su nombre.int Edad;  // Campo de cada objeto Persona que

// almacena su edad.   int DNI;   // Campo de cada objeto Persona que almacena

// su DNI. }

Page 28: C#

MétodosMétodos Todo método debe de ser parte de una clase, no existen métodos globales.

De forma predeterminada, los parámetros se pasan por valor.

Un método debe tener como máximo un único parámetro params y éste debe de ser el último.

Un método puede devolver cualquier tipo de datos, incluyendo tipos de clase.

Ya que en C# las matrices se implementan como objetos, un método también puede devolver una matriz (algo que se diferencia de C++ en que las matrices no son válidas como tipos de valores devueltos).

Al igual que el C++, C# implementa sobrecarga de métodos, dos o más métodos pueden tener el mismo nombre siempre y cuando se diferencien por sus parámetros.

El método Main es un método especial al cual se refiere el punto de partida del programa. Tiene la siguiente sintaxis: public static int Main(string[] args){...}.

Page 29: C#

MétodosMétodos La sintaxis que usa C# para definir métodos es:

<tipoDevuelto> <nombreMétodo> (<parametros>)

{

<instrucciones>

}

Todo método puede devolver un objeto, y el tipo de dato al que pertenece este objeto es lo que se indica en <tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio finalizar la ejecución de sus instrucciones con alguna instrucción return <objeto>; que indique qué objeto ha de devolverse.

Page 30: C#

MétodosMétodos Ejemplo:

class Persona

{ string Nombre; //Campo de cada objeto Persona que almacena su nombre int Edad; //Campo de cada objeto Persona que almacena su edad int DNI; //Campo de cada objeto Persona que almacena su DNI

void Cumpleaños() //Incrementa en uno de la edad del objeto Persona

{

Edad++;

}

}

Page 31: C#

ParámetrosParámetros En C# se admiten cuatro tipos de parámetros:

Parámetros de entrada. Parámetros de entrada. Parámetros de salida.Parámetros de salida. Parámetros por referencia.Parámetros por referencia. Parámetros de número indefinido.Parámetros de número indefinido.

Page 32: C#

ParámetrosParámetros Parámetros de entradaParámetros de entrada: : Un parámetro de entrada recibe una copia del valor que almacenaría una variable del tipo del objeto que se le pase.

Si el objeto es de un tipo valor se le pasará una copia del objeto; mientras que si el objeto es de un tipo referencia entonces se le pasará una copia de la referencia al mismo y cualquier modificación que se haga al parámetro dentro del método también afectará al objeto original.

Ejemplo:

int Suma(int par1, int par2)

{ return par1+par2;

}

Page 33: C#

Ejemplo:

using System;class ParametrosEntrada{ public int a = 1; public static void F(ParametrosEntrada p) { p.a++; } public static void G(int p) { p++; } public static void Main() { int obj1 = 0; ParametrosEntrada obj2 = new ParametrosEntrada(); G(obj1); F(obj2); Console.WriteLine("{0}, {1}", obj1, obj2.a); }}

ParámetrosParámetros

Page 34: C#

ParámetrosParámetros Parámetros de salidaParámetros de salida: : Un parámetro de salida se diferencia de uno de entrada en que todo cambio que se le realice en el código del método al que pertenece afectará al objeto que se le pase al llamar dicho método tanto si éste es de un tipo por valor como si es de un tipo referencia. Esto se debe a que lo que a estos parámetros se les pasa es siempre una referencia al valor que almacenaría una variable del tipo del objeto que se les pase.

Sintaxis:

out <tipoParámetro> <nombreParámetro>

Ejemplo:

a.f(x, out z)

Llama al método f() del objeto a pasándole x como parámetro de entrada y z como parámetro de salida. El valor de z cambiará tras la llamada al método.

Page 35: C#

ParámetrosParámetros Parámetros por referenciaParámetros por referencia: : Un parámetro por referencia es similar a un parámetro de salida sólo que no es obligatorio modificarlo dentro del método al que pertenece, por lo que será obligatorio pasarle una variable inicializada ya que no se garantiza su inicialización en el método.

Sintaxis:

ref <tipoParámetro> <nombreParámetro>

Ejemplo:

a.f(x, ref z)

Llama al método f() del objeto a pasándole x como parámetro de entrada y z como parámetro por referencia. El valor de z puede o no cambiar tras la llamada al método.

Page 36: C#

ParámetrosParámetros Parámetros de número indefinidoParámetros de número indefinido: : C# permite diseñar métodos que puedan tomar cualquier número de parámetros. Para ello hay que indicar como último parámetro del método un parámetro de algún tipo de tabla unidimensional precedido de la palabra reservada params.

Ejemplo:

static void F(int x, params object[ ] extras){ }

Todos los parámetros de número indefinido que se pasan al método al llamarlo deben ser del mismo tipo que la tabla. En el ejemplo ese tipo es la clase primigenia object, con lo que se consigue que gracias al polimorfismo el método pueda tomar cualquier número de parámetros de cualquier tipo.

Page 37: C#

ParámetrosParámetros Sobrecarga con tipos de parámetrosSobrecarga con tipos de parámetros::

class Sobrecarga{

 public void f(int x) { } public void f(out int x) { }

}

Restricción: no puede ocurrir que la única diferencia de dos métodos sea que en un determinado parámetro lleve el modificador ref y en el otro lleve el modificador out.

class SobrecargaInválida{

  public void f(ref int x)  { }

 public void f(out int x)  { }

}

Page 38: C#

DelegatesDelegates Un delegado es un tipo especial de clase cuyos objetos pueden almacenar referencias a uno o más métodos de tal manera que a través del objeto sea posible solicitar la ejecución en cadena de todos ellos.

En C# un delegado no es más que un tipo especial de subclase System.MulticastDelegate. Sin embargo, para definir estas clases no se puede utilizar el mecanismo de herencia normal sino que ha de seguirse la siguiente sintaxis especial:

<modificadores> delegate <tipoRetorno> <nombreDelegado> (<parámetros>);

La lista de parámetros de los métodos cuyos códigos puede almacenar en su interior los objetos de ese tipo delegado (objetos delegados).

Page 39: C#

DelegatesDelegatesEjemplo:using System;using System.Reflection;public delegate void D();public class ComprobaciónDelegados     {  public static void Main()  {   Type t = typeof(ComprobaciónDelegados);   MethodInfo m = t.GetMethod("Método1");   D obj  = (D) Delegate.CreateDelegate(typeof(D), m);   obj();  }    public static void Método1()  {    Console.WriteLine("Ejecutado Método1");   }   public static void Método2(string s)  {    Console.WriteLine("Ejecutado Método2");   }}

Page 40: C#

DelegatesDelegatesEl siguiente ejemplo muestra cómo crear un objeto delegado de tipo D, asociarle el código de un método llamado F y ejecutar dicho código a través del objeto delegado:

using System;delegate void D(int valor);class EjemploDelegado{

  public static void Main()  {   D objDelegado = new D(F);   objDelegado(3);   }   public static void F(int x)              {   Console.WriteLine( "Pasado valor {0} a F()", x);  }

}

Page 41: C#

Sistemas de tiposSistemas de tiposCategory DescriptionValuetypes

Simple types Signed integral: sbyte, short, int, long

Unsigned integral: byte, ushort, uint, ulong

Unicode characters: charIEEE floating point: float, double

High-precision decimal: decimal

Boolean: boolEnum types User-defined types of the form enum E

{...}

Struct types User-defined types of the form struct S {...}

Nullable types Extensions of all other value types with a null value

Referencetypes

Class types Ultimate base class of all other types: object

Unicode strings: stringUser-defined types of the form class C {...}

Interface types User-defined types of the form interface I {...}

Array types Single- and multi-dimensional, for example, int[] and int[,]

Delegate types User-defined types of the form e.g. delegate int D(...)

Page 42: C#

Herencia y PolimorfismoHerencia y Polimorfismo• Soporte de Herencia, existencia de clases abstract

• Clases definidas en mas de un archivo partial

• Existen clases que no pueden heredarse sealed

• Metodos virtual para ser polimorficos y override

• Otros aspectos:

• public: accedido desde cualquier otro lado.

• private: solo accedido por la clase o estructura que lo defina.

• protected: quien lo define y quienes hereden a quien lo define.

• internal: solo puede ser accedido por quienes esten en el mismo assembly

• Existencia de interfaces.

• No tiene herencia multiple y no define visibilidad en la herencia.

Page 43: C#

Estructuras de controlEstructuras de controlif (<condición>){  <instruccionesIf>} else{    <instruccionesElse>}

switch (<expresión>)  {    case <valor1>:  <bloque1>     <siguienteAcción>    case <valor2>:  <bloque2>     <siguienteAcción>    ...    default:  <bloqueDefault>     <siguienteAcción>  }goto case <valori>;goto default;break;

 

while (<condición>){  <instrucciones> }

do {    <instrucciones>} while(<condición>);

for (<inicialización>; <condición>; <modificación>){ <instrucciones> }

foreach (<tipoElemento> <elemento> in <colección>) {   <instrucciones>}

Page 44: C#

ExcepcionesExcepciones• Las excepciones son objetos que en sus atributos tienen todo el contexto y la descripcion de manera entendible y no con un numero de error poco descriptivo.

• Soporte para brindar ayuda via web con un atributo especifico para url.

• Manejo de flujo con try, catch, finally y throw

• System.SystemException excepciones generadas por la plataforma y no son recuperables.

• System.ApplicationException excepciones generadas por la applicacion y pueden ser recuperables.

• En aplicaciones web o de winforms se define handlers generales.

Page 45: C#

ConcurrenciaConcurrencia

• Namespace System.Threading. Tiene a la clase Thread como core.

• La carga y cambio de contexto de threads esta a cargo de la CLR.

• Applicacion multithreading: delegate asincronicos o disparo de threads explicito.

• Metodos de thread-safety: lock, monitor, semphore, mutex, Synchonize attribute.

• Soporte de Foreground threads y Background threads.

Page 46: C#

Manejo de memoriaManejo de memoria

Temario

Pila Administrada Creación de Objetos Ciclos de Recolección El Algoritmo de Recolección de Basura Optimización basada en Generaciones La Clase System.GC

Page 47: C#

Managed HeapManaged Heap

Page 48: C#

Creación de ObjetosCreación de ObjetosLa instrucción intermedia newobj (Interpreted Language).Pasos en la ejecución de la instrucción:

(1) Calcular el número de bytes necesarios para almacenar todos los campos del objeto.(2) Sumar los bytes requeridos para la gestión interna de los objetos.(3)El gestor de memoria comprueba que exista suficiente espacio en la pila de memoria administrada para albergar los bytes requeridos.(4) Si el espacio en la pila es suficiente para albergar al objeto nuevo se invoca el constructor del tipo recibiendo como parámetro de instancia (puntero this) la dirección que figura en el puntero de reserva. (5) El puntero de reserva es incrementado con la cantidad de bytes reservados.

Page 49: C#

Creación de ObjetosCreación de Objetos

Page 50: C#

Ciclos de RecolecciónCiclos de Recolección

Page 51: C#

El algoritmo de recolección de basuraEl algoritmo de recolección de basura

Page 52: C#

Optimización basada en GeneracionesOptimización basada en Generaciones

Premisas:

Cuanto más joven es un objeto, más corta será su vida. Cuanto más antiguo es un objeto, más larga será su vida. Los objetos más jóvenes tienden a estar relacionados entre sí y probablemente

serán accedidos al mismo tiempo. Compactar una porción de la pila de memoria es más rápido que compactar

toda la pila.

Page 53: C#

Optimización basada en Generaciones Optimización basada en Generaciones (ejemplo)(ejemplo)

Page 54: C#

Optimización basada en Generaciones Optimización basada en Generaciones (ejemplo)(ejemplo)

Page 55: C#

Optimización basada en Generaciones Optimización basada en Generaciones (ejemplo)(ejemplo)

Page 56: C#

La clase System.GCLa clase System.GC

System.GC.MaxGeneration

System.GC.MaxGeneration(objeto)

GetTotalMemory(efectuarRecoleccion)

GC.Collect(generacionMaxima)

Page 57: C#

Lo utilizaría en:Lo utilizaría en:• Aplicaciones Web.

• Aplicaciones de escritorio para Windows.

• Web services.

No lo utilizaría en:No lo utilizaría en:• Ambientes que no sean Windows.

• Servidores Stand Alone de procesamiento de requerimientos.

• Ambientes distribuidos.