pregunta corta2

04/11/2003 - 15:22 por Josema | Informe spam
Hola a todos y disculpar por la pregunta...soy muy nuevo
aqui...

Yo siempre he usado string, int, bool, array, etc...

alguien podria decirme para que se usa el tipo object...y
como se usa...

object myobj=new object();
Muchas Gracias.
Josema

Preguntas similare

Leer las respuestas

#11 Michael Giagnocavo [MVP]
07/11/2003 - 23:14 | Informe spam
Ya lo dejé claro en un mensaje anterior:

"debí utilizar la palabra Casting en vez de Boxing"



Si, el mensaje que llego despues de que envie el mio :).

Aun asi, no tienes que el opcode castclass para meter un tipo referencia en
un objeto. No hay ningun problema de rendimiento al meter un tipo
referencia en un array de objeto[]. Eso era el punto. No pasa boxing ni
casting ni asi, solo un stelem.ref, como dije.

De hecho, si quieres ser tecnico (este hilo es algo tecnico no?) ni tienes
que usar castclass cuando sacas algo de un object[]. castclass sirve para
que tu codigo sea verficable, pero es posible en IL. C# no lo generara,
pero el CLR lo soporta.

Gracias,
-mike
MVP


"Juan Cristóbal Olivares C." wrote in message
news:


"Michael Giagnocavo [MVP]" escribió en el mensaje
news:
> > Al hacer un cast desde object al tipo original es necesario hacer una
> > conversión.
>
> ESO si, pero no tiene NADA que ver al respeto de boxing (solo con los
> valuetypes tendras un unbox), ni al guardar un tipo referencia en un


array
> object[].
>
> -mike
> MVP
>
>
> > Nota: Esto se evita con el uso de genéricos.
> >
> > .assembly extern mscorlib
> > {
> > .ver 1:0:3300:0
> > }
> > .assembly '13'
> > {
> > .hash algorithm 0x00008004
> > .ver 0:0:0:0
> > }
> > .class private auto ansi beforefieldinit programa
> > extends [mscorlib]System.Object
> > {
> >
> > // method line 1
> > .method public hidebysig specialname rtspecialname
> > instance default void .ctor() cil managed
> > {
> > // Method begins at RVA 0x20ec
> > // Code size 101 (0x65)
> > .maxstack 7
> > .locals init (
> > object[] V_0,
> > object V_1,
> > object V_2,
> > object V_3,
> > object[] V_4,
> > int32 V_5)
> > IL_0000: ldarg.0
> > IL_0001: call instance void valuetype [corlib]System.Object::.ctor()
> > IL_0006: ldc.i4.3
> > IL_0007: newarr [mscorlib]System.Object
> > IL_000c: stloc.s 4
> > IL_000e: ldloc.s 4
> > IL_0010: ldc.i4.0
> > IL_0011: newobj instance void valuetype


[corlib]System.Object::.ctor()
> > IL_0016: stelem.ref
> > IL_0017: ldloc.s 4
> > IL_0019: ldc.i4.1
> > IL_001a: ldloca.s 5
> > IL_001c: initobj [mscorlib]System.Int32
> > IL_0022: ldloc.s 5
> > IL_0024: box [mscorlib]System.Int32
> > IL_0029: stelem.ref
> > IL_002a: ldloc.s 4
> > IL_002c: ldc.i4.2
> > IL_002d: newobj instance void class [corlib]System.Exception::.ctor()
> > IL_0032: stelem.ref
> > IL_0033: ldloc.s 4
> > IL_0035: stloc.0
> > IL_0036: ldloc.0
> > IL_0037: ldc.i4.0
> > IL_0038: ldelem.ref
> > IL_0039: stloc.1
> > IL_003a: ldloc.1
> > IL_003b: call void class [corlib]System.Console::WriteLine(object)
> > IL_0040: ldloc.0
> > IL_0041: ldc.i4.1
> > IL_0042: ldelem.ref
> > IL_0043: unbox [mscorlib]System.Int32
> > IL_0048: ldind.i4
> > IL_0049: box [mscorlib]System.Int32
> > IL_004e: stloc.2
> > IL_004f: ldloc.2
> > IL_0050: call void class [corlib]System.Console::WriteLine(object)
> > IL_0055: ldloc.0
> > IL_0056: ldc.i4.2
> > IL_0057: ldelem.ref
> > IL_0058: castclass [mscorlib]System.Exception
> > IL_005d: stloc.3
> > IL_005e: ldloc.3
> > IL_005f: call void class [corlib]System.Console::WriteLine(object)
> > IL_0064: ret
> > } // end of method programa::instance default void .ctor()
> >
> > // method line 2
> > .method public static
> > default void Main() cil managed
> > {
> > // Method begins at RVA 0x215d
> > .entrypoint
> > // Code size 1 (0x1)
> > .maxstack 8
> > IL_0000: ret
> > } // end of method programa::default void Main()
> >
> > } // end of type programa
> >
> >
> >
> >
> >
> > "Michael Giagnocavo [MVP]" escribió en el
mensaje
> > news:%23%
> > > using System;
> > > class c1 {
> > > public static void Main() {
> > > object[] arreglo = new object[] { new Exception(), new Int32(),


new
> > > Object() };
> > > }
> > > }
> > >
> > > Compilar con CSC. ILDASM:
> > > .method public hidebysig static void Main() cil managed
> > > {
> > > .entrypoint
> > > // Code size 35 (0x23)
> > > .maxstack 3
> > > .locals init (object[] V_0,
> > > object[] V_1)
> > > IL_0000: ldc.i4.3
> > > IL_0001: newarr [mscorlib]System.Object
> > > IL_0006: stloc.1
> > > IL_0007: ldloc.1
> > > IL_0008: ldc.i4.0
> > > IL_0009: newobj instance void
[mscorlib]System.Exception::.ctor()
> > > IL_000e: stelem.ref
> > > IL_000f: ldloc.1
> > > IL_0010: ldc.i4.1
> > > IL_0011: ldc.i4.0
> > > IL_0012: box [mscorlib]System.Int32
> > > IL_0017: stelem.ref
> > > ...
> > > IL_0022: ret
> > > } // end of method c1::Main
> > >
> > > Dime, donde esta el box para el Exception? Boxing solo existe para
> > > ValueTypes. Como puedes ver, para tipos referencia, no es necesario
> hacer
> > > un box. Ni es posible.
> > >
> > > -mike
> > > MVP
> > >
> > >
> > > "Juan Cristóbal Olivares C." wrote in message
> > > news:
> > > > No es así. Cuando un tipo es transformado a un tipo base, también


se
> > > realiza
> > > > un boxing.
> > > >
> > > > "Michael Giagnocavo [MVP]" escribió en el
> > mensaje
> > > > news:uNg$
> > > > > > object[] arreglo = new object { new Exception (), new Int32


(),
> new
> > > > Object
> > > > > > () };
> > > > > >
> > > > > > Todos los elementos son almacenados como objects, pero aquí


hay
> dos
> > > > > > problemas:
> > > > > >
> > > > > > 1.- Rendimiento: los elementos tienen que ser encapsulados
> (boxing)
> > > > hacia
> > > > > > object y, para volver a usarlos, hay que desencapsularlos.


Esto
> baja
> > > el
> > > > > > rendimiento de la aplicación.
> > > > >
> > > > > Bueno, solo los ValueTypes tendran que ser boxeados (el Int32 en
> este
> > > > caso).
> > > > > Los otros elementos (tipos referencia) seran almacenados
> directamente
> > > > > (stelem.ref).
> > > > >
> > > > > -mike
> > > > > MVP
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#12 Juan Cristóbal Olivares C.
08/11/2003 - 04:53 | Informe spam
Sí hay problemas de rendimiento. Por favor busca información acerca de los
genéricos.

"Michael Giagnocavo [MVP]" escribió en el mensaje
news:%
> Ya lo dejé claro en un mensaje anterior:
>
> "debí utilizar la palabra Casting en vez de Boxing"

Si, el mensaje que llego despues de que envie el mio :).

Aun asi, no tienes que el opcode castclass para meter un tipo referencia


en
un objeto. No hay ningun problema de rendimiento al meter un tipo
referencia en un array de objeto[]. Eso era el punto. No pasa boxing ni
casting ni asi, solo un stelem.ref, como dije.

De hecho, si quieres ser tecnico (este hilo es algo tecnico no?) ni tienes
que usar castclass cuando sacas algo de un object[]. castclass sirve para
que tu codigo sea verficable, pero es posible en IL. C# no lo generara,
pero el CLR lo soporta.

Gracias,
-mike
MVP


"Juan Cristóbal Olivares C." wrote in message
news:

>
> "Michael Giagnocavo [MVP]" escribió en el


mensaje
> news:
> > > Al hacer un cast desde object al tipo original es necesario hacer


una
> > > conversión.
> >
> > ESO si, pero no tiene NADA que ver al respeto de boxing (solo con los
> > valuetypes tendras un unbox), ni al guardar un tipo referencia en un
array
> > object[].
> >
> > -mike
> > MVP
> >
> >
> > > Nota: Esto se evita con el uso de genéricos.
> > >
> > > .assembly extern mscorlib
> > > {
> > > .ver 1:0:3300:0
> > > }
> > > .assembly '13'
> > > {
> > > .hash algorithm 0x00008004
> > > .ver 0:0:0:0
> > > }
> > > .class private auto ansi beforefieldinit programa
> > > extends [mscorlib]System.Object
> > > {
> > >
> > > // method line 1
> > > .method public hidebysig specialname rtspecialname
> > > instance default void .ctor() cil managed
> > > {
> > > // Method begins at RVA 0x20ec
> > > // Code size 101 (0x65)
> > > .maxstack 7
> > > .locals init (
> > > object[] V_0,
> > > object V_1,
> > > object V_2,
> > > object V_3,
> > > object[] V_4,
> > > int32 V_5)
> > > IL_0000: ldarg.0
> > > IL_0001: call instance void valuetype


[corlib]System.Object::.ctor()
> > > IL_0006: ldc.i4.3
> > > IL_0007: newarr [mscorlib]System.Object
> > > IL_000c: stloc.s 4
> > > IL_000e: ldloc.s 4
> > > IL_0010: ldc.i4.0
> > > IL_0011: newobj instance void valuetype
[corlib]System.Object::.ctor()
> > > IL_0016: stelem.ref
> > > IL_0017: ldloc.s 4
> > > IL_0019: ldc.i4.1
> > > IL_001a: ldloca.s 5
> > > IL_001c: initobj [mscorlib]System.Int32
> > > IL_0022: ldloc.s 5
> > > IL_0024: box [mscorlib]System.Int32
> > > IL_0029: stelem.ref
> > > IL_002a: ldloc.s 4
> > > IL_002c: ldc.i4.2
> > > IL_002d: newobj instance void class


[corlib]System.Exception::.ctor()
> > > IL_0032: stelem.ref
> > > IL_0033: ldloc.s 4
> > > IL_0035: stloc.0
> > > IL_0036: ldloc.0
> > > IL_0037: ldc.i4.0
> > > IL_0038: ldelem.ref
> > > IL_0039: stloc.1
> > > IL_003a: ldloc.1
> > > IL_003b: call void class [corlib]System.Console::WriteLine(object)
> > > IL_0040: ldloc.0
> > > IL_0041: ldc.i4.1
> > > IL_0042: ldelem.ref
> > > IL_0043: unbox [mscorlib]System.Int32
> > > IL_0048: ldind.i4
> > > IL_0049: box [mscorlib]System.Int32
> > > IL_004e: stloc.2
> > > IL_004f: ldloc.2
> > > IL_0050: call void class [corlib]System.Console::WriteLine(object)
> > > IL_0055: ldloc.0
> > > IL_0056: ldc.i4.2
> > > IL_0057: ldelem.ref
> > > IL_0058: castclass [mscorlib]System.Exception
> > > IL_005d: stloc.3
> > > IL_005e: ldloc.3
> > > IL_005f: call void class [corlib]System.Console::WriteLine(object)
> > > IL_0064: ret
> > > } // end of method programa::instance default void .ctor()
> > >
> > > // method line 2
> > > .method public static
> > > default void Main() cil managed
> > > {
> > > // Method begins at RVA 0x215d
> > > .entrypoint
> > > // Code size 1 (0x1)
> > > .maxstack 8
> > > IL_0000: ret
> > > } // end of method programa::default void Main()
> > >
> > > } // end of type programa
> > >
> > >
> > >
> > >
> > >
> > > "Michael Giagnocavo [MVP]" escribió en el
> mensaje
> > > news:%23%
> > > > using System;
> > > > class c1 {
> > > > public static void Main() {
> > > > object[] arreglo = new object[] { new Exception(), new Int32(),
new
> > > > Object() };
> > > > }
> > > > }
> > > >
> > > > Compilar con CSC. ILDASM:
> > > > .method public hidebysig static void Main() cil managed
> > > > {
> > > > .entrypoint
> > > > // Code size 35 (0x23)
> > > > .maxstack 3
> > > > .locals init (object[] V_0,
> > > > object[] V_1)
> > > > IL_0000: ldc.i4.3
> > > > IL_0001: newarr [mscorlib]System.Object
> > > > IL_0006: stloc.1
> > > > IL_0007: ldloc.1
> > > > IL_0008: ldc.i4.0
> > > > IL_0009: newobj instance void
> [mscorlib]System.Exception::.ctor()
> > > > IL_000e: stelem.ref
> > > > IL_000f: ldloc.1
> > > > IL_0010: ldc.i4.1
> > > > IL_0011: ldc.i4.0
> > > > IL_0012: box [mscorlib]System.Int32
> > > > IL_0017: stelem.ref
> > > > ...
> > > > IL_0022: ret
> > > > } // end of method c1::Main
> > > >
> > > > Dime, donde esta el box para el Exception? Boxing solo existe


para
> > > > ValueTypes. Como puedes ver, para tipos referencia, no es


necesario
> > hacer
> > > > un box. Ni es posible.
> > > >
> > > > -mike
> > > > MVP
> > > >
> > > >
> > > > "Juan Cristóbal Olivares C." wrote in message
> > > > news:
> > > > > No es así. Cuando un tipo es transformado a un tipo base,


también
se
> > > > realiza
> > > > > un boxing.
> > > > >
> > > > > "Michael Giagnocavo [MVP]" escribió en


el
> > > mensaje
> > > > > news:uNg$
> > > > > > > object[] arreglo = new object { new Exception (), new Int32
(),
> > new
> > > > > Object
> > > > > > > () };
> > > > > > >
> > > > > > > Todos los elementos son almacenados como objects, pero aquí
hay
> > dos
> > > > > > > problemas:
> > > > > > >
> > > > > > > 1.- Rendimiento: los elementos tienen que ser encapsulados
> > (boxing)
> > > > > hacia
> > > > > > > object y, para volver a usarlos, hay que desencapsularlos.
Esto
> > baja
> > > > el
> > > > > > > rendimiento de la aplicación.
> > > > > >
> > > > > > Bueno, solo los ValueTypes tendran que ser boxeados (el Int32


en
> > este
> > > > > caso).
> > > > > > Los otros elementos (tipos referencia) seran almacenados
> > directamente
> > > > > > (stelem.ref).
> > > > > >
> > > > > > -mike
> > > > > > MVP
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#13 Michael Giagnocavo [MVP]
08/11/2003 - 07:21 | Informe spam
Generics daran mas rendimiento cuando usas *valuetypes* (porque ya no hay
que hacer boxing). Con los reference types, ahorras el castclass cuando
sacas un objeto.

Creo que estas un poco confundido con todos estos terminos. No necesito
buscar mas informacion, ya que tengo casi 3 anios trabajando con .NET, y un
rato usando generics en C#.

-mike
MVP

"Juan Cristóbal Olivares C." wrote in message
news:
Sí hay problemas de rendimiento. Por favor busca información acerca de los
genéricos.

"Michael Giagnocavo [MVP]" escribió en el mensaje
news:%
> > Ya lo dejé claro en un mensaje anterior:
> >
> > "debí utilizar la palabra Casting en vez de Boxing"
>
> Si, el mensaje que llego despues de que envie el mio :).
>
> Aun asi, no tienes que el opcode castclass para meter un tipo referencia
en
> un objeto. No hay ningun problema de rendimiento al meter un tipo
> referencia en un array de objeto[]. Eso era el punto. No pasa boxing


ni
> casting ni asi, solo un stelem.ref, como dije.
>
> De hecho, si quieres ser tecnico (este hilo es algo tecnico no?) ni


tienes
> que usar castclass cuando sacas algo de un object[]. castclass sirve


para
> que tu codigo sea verficable, pero es posible en IL. C# no lo generara,
> pero el CLR lo soporta.
>
> Gracias,
> -mike
> MVP
>
>
> "Juan Cristóbal Olivares C." wrote in message
> news:
>
> >
> > "Michael Giagnocavo [MVP]" escribió en el
mensaje
> > news:
> > > > Al hacer un cast desde object al tipo original es necesario hacer
una
> > > > conversión.
> > >
> > > ESO si, pero no tiene NADA que ver al respeto de boxing (solo con


los
> > > valuetypes tendras un unbox), ni al guardar un tipo referencia en un
> array
> > > object[].
> > >
> > > -mike
> > > MVP
> > >
> > >
> > > > Nota: Esto se evita con el uso de genéricos.
> > > >
> > > > .assembly extern mscorlib
> > > > {
> > > > .ver 1:0:3300:0
> > > > }
> > > > .assembly '13'
> > > > {
> > > > .hash algorithm 0x00008004
> > > > .ver 0:0:0:0
> > > > }
> > > > .class private auto ansi beforefieldinit programa
> > > > extends [mscorlib]System.Object
> > > > {
> > > >
> > > > // method line 1
> > > > .method public hidebysig specialname rtspecialname
> > > > instance default void .ctor() cil managed
> > > > {
> > > > // Method begins at RVA 0x20ec
> > > > // Code size 101 (0x65)
> > > > .maxstack 7
> > > > .locals init (
> > > > object[] V_0,
> > > > object V_1,
> > > > object V_2,
> > > > object V_3,
> > > > object[] V_4,
> > > > int32 V_5)
> > > > IL_0000: ldarg.0
> > > > IL_0001: call instance void valuetype
[corlib]System.Object::.ctor()
> > > > IL_0006: ldc.i4.3
> > > > IL_0007: newarr [mscorlib]System.Object
> > > > IL_000c: stloc.s 4
> > > > IL_000e: ldloc.s 4
> > > > IL_0010: ldc.i4.0
> > > > IL_0011: newobj instance void valuetype
> [corlib]System.Object::.ctor()
> > > > IL_0016: stelem.ref
> > > > IL_0017: ldloc.s 4
> > > > IL_0019: ldc.i4.1
> > > > IL_001a: ldloca.s 5
> > > > IL_001c: initobj [mscorlib]System.Int32
> > > > IL_0022: ldloc.s 5
> > > > IL_0024: box [mscorlib]System.Int32
> > > > IL_0029: stelem.ref
> > > > IL_002a: ldloc.s 4
> > > > IL_002c: ldc.i4.2
> > > > IL_002d: newobj instance void class
[corlib]System.Exception::.ctor()
> > > > IL_0032: stelem.ref
> > > > IL_0033: ldloc.s 4
> > > > IL_0035: stloc.0
> > > > IL_0036: ldloc.0
> > > > IL_0037: ldc.i4.0
> > > > IL_0038: ldelem.ref
> > > > IL_0039: stloc.1
> > > > IL_003a: ldloc.1
> > > > IL_003b: call void class


[corlib]System.Console::WriteLine(object)
> > > > IL_0040: ldloc.0
> > > > IL_0041: ldc.i4.1
> > > > IL_0042: ldelem.ref
> > > > IL_0043: unbox [mscorlib]System.Int32
> > > > IL_0048: ldind.i4
> > > > IL_0049: box [mscorlib]System.Int32
> > > > IL_004e: stloc.2
> > > > IL_004f: ldloc.2
> > > > IL_0050: call void class


[corlib]System.Console::WriteLine(object)
> > > > IL_0055: ldloc.0
> > > > IL_0056: ldc.i4.2
> > > > IL_0057: ldelem.ref
> > > > IL_0058: castclass [mscorlib]System.Exception
> > > > IL_005d: stloc.3
> > > > IL_005e: ldloc.3
> > > > IL_005f: call void class


[corlib]System.Console::WriteLine(object)
> > > > IL_0064: ret
> > > > } // end of method programa::instance default void .ctor()
> > > >
> > > > // method line 2
> > > > .method public static
> > > > default void Main() cil managed
> > > > {
> > > > // Method begins at RVA 0x215d
> > > > .entrypoint
> > > > // Code size 1 (0x1)
> > > > .maxstack 8
> > > > IL_0000: ret
> > > > } // end of method programa::default void Main()
> > > >
> > > > } // end of type programa
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > "Michael Giagnocavo [MVP]" escribió en el
> > mensaje
> > > > news:%23%
> > > > > using System;
> > > > > class c1 {
> > > > > public static void Main() {
> > > > > object[] arreglo = new object[] { new Exception(), new


Int32(),
> new
> > > > > Object() };
> > > > > }
> > > > > }
> > > > >
> > > > > Compilar con CSC. ILDASM:
> > > > > .method public hidebysig static void Main() cil managed
> > > > > {
> > > > > .entrypoint
> > > > > // Code size 35 (0x23)
> > > > > .maxstack 3
> > > > > .locals init (object[] V_0,
> > > > > object[] V_1)
> > > > > IL_0000: ldc.i4.3
> > > > > IL_0001: newarr [mscorlib]System.Object
> > > > > IL_0006: stloc.1
> > > > > IL_0007: ldloc.1
> > > > > IL_0008: ldc.i4.0
> > > > > IL_0009: newobj instance void
> > [mscorlib]System.Exception::.ctor()
> > > > > IL_000e: stelem.ref
> > > > > IL_000f: ldloc.1
> > > > > IL_0010: ldc.i4.1
> > > > > IL_0011: ldc.i4.0
> > > > > IL_0012: box [mscorlib]System.Int32
> > > > > IL_0017: stelem.ref
> > > > > ...
> > > > > IL_0022: ret
> > > > > } // end of method c1::Main
> > > > >
> > > > > Dime, donde esta el box para el Exception? Boxing solo existe
para
> > > > > ValueTypes. Como puedes ver, para tipos referencia, no es
necesario
> > > hacer
> > > > > un box. Ni es posible.
> > > > >
> > > > > -mike
> > > > > MVP
> > > > >
> > > > >
> > > > > "Juan Cristóbal Olivares C." wrote in


message
> > > > > news:
> > > > > > No es así. Cuando un tipo es transformado a un tipo base,
también
> se
> > > > > realiza
> > > > > > un boxing.
> > > > > >
> > > > > > "Michael Giagnocavo [MVP]" escribió


en
el
> > > > mensaje
> > > > > > news:uNg$
> > > > > > > > object[] arreglo = new object { new Exception (), new


Int32
> (),
> > > new
> > > > > > Object
> > > > > > > > () };
> > > > > > > >
> > > > > > > > Todos los elementos son almacenados como objects, pero


aquí
> hay
> > > dos
> > > > > > > > problemas:
> > > > > > > >
> > > > > > > > 1.- Rendimiento: los elementos tienen que ser encapsulados
> > > (boxing)
> > > > > > hacia
> > > > > > > > object y, para volver a usarlos, hay que desencapsularlos.
> Esto
> > > baja
> > > > > el
> > > > > > > > rendimiento de la aplicación.
> > > > > > >
> > > > > > > Bueno, solo los ValueTypes tendran que ser boxeados (el


Int32
en
> > > este
> > > > > > caso).
> > > > > > > Los otros elementos (tipos referencia) seran almacenados
> > > directamente
> > > > > > > (stelem.ref).
> > > > > > >
> > > > > > > -mike
> > > > > > > MVP
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#14 Juan Cristóbal Olivares C.
08/11/2003 - 07:54 | Informe spam
no voy a discutir contigo... basta con que hagas unos benchmarks

"Michael Giagnocavo [MVP]" escribió en el mensaje
news:e%
Generics daran mas rendimiento cuando usas *valuetypes* (porque ya no hay
que hacer boxing). Con los reference types, ahorras el castclass cuando
sacas un objeto.

Creo que estas un poco confundido con todos estos terminos. No necesito
buscar mas informacion, ya que tengo casi 3 anios trabajando con .NET, y


un
rato usando generics en C#.

-mike
MVP

"Juan Cristóbal Olivares C." wrote in message
news:
> Sí hay problemas de rendimiento. Por favor busca información acerca de


los
> genéricos.
>
> "Michael Giagnocavo [MVP]" escribió en el


mensaje
> news:%
> > > Ya lo dejé claro en un mensaje anterior:
> > >
> > > "debí utilizar la palabra Casting en vez de Boxing"
> >
> > Si, el mensaje que llego despues de que envie el mio :).
> >
> > Aun asi, no tienes que el opcode castclass para meter un tipo


referencia
> en
> > un objeto. No hay ningun problema de rendimiento al meter un tipo
> > referencia en un array de objeto[]. Eso era el punto. No pasa boxing
ni
> > casting ni asi, solo un stelem.ref, como dije.
> >
> > De hecho, si quieres ser tecnico (este hilo es algo tecnico no?) ni
tienes
> > que usar castclass cuando sacas algo de un object[]. castclass sirve
para
> > que tu codigo sea verficable, pero es posible en IL. C# no lo


generara,
> > pero el CLR lo soporta.
> >
> > Gracias,
> > -mike
> > MVP
> >
> >
> > "Juan Cristóbal Olivares C." wrote in message
> > news:
> >
> > >
> > > "Michael Giagnocavo [MVP]" escribió en el
> mensaje
> > > news:
> > > > > Al hacer un cast desde object al tipo original es necesario


hacer
> una
> > > > > conversión.
> > > >
> > > > ESO si, pero no tiene NADA que ver al respeto de boxing (solo con
los
> > > > valuetypes tendras un unbox), ni al guardar un tipo referencia en


un
> > array
> > > > object[].
> > > >
> > > > -mike
> > > > MVP
> > > >
> > > >
> > > > > Nota: Esto se evita con el uso de genéricos.
> > > > >
> > > > > .assembly extern mscorlib
> > > > > {
> > > > > .ver 1:0:3300:0
> > > > > }
> > > > > .assembly '13'
> > > > > {
> > > > > .hash algorithm 0x00008004
> > > > > .ver 0:0:0:0
> > > > > }
> > > > > .class private auto ansi beforefieldinit programa
> > > > > extends [mscorlib]System.Object
> > > > > {
> > > > >
> > > > > // method line 1
> > > > > .method public hidebysig specialname rtspecialname
> > > > > instance default void .ctor() cil managed
> > > > > {
> > > > > // Method begins at RVA 0x20ec
> > > > > // Code size 101 (0x65)
> > > > > .maxstack 7
> > > > > .locals init (
> > > > > object[] V_0,
> > > > > object V_1,
> > > > > object V_2,
> > > > > object V_3,
> > > > > object[] V_4,
> > > > > int32 V_5)
> > > > > IL_0000: ldarg.0
> > > > > IL_0001: call instance void valuetype
> [corlib]System.Object::.ctor()
> > > > > IL_0006: ldc.i4.3
> > > > > IL_0007: newarr [mscorlib]System.Object
> > > > > IL_000c: stloc.s 4
> > > > > IL_000e: ldloc.s 4
> > > > > IL_0010: ldc.i4.0
> > > > > IL_0011: newobj instance void valuetype
> > [corlib]System.Object::.ctor()
> > > > > IL_0016: stelem.ref
> > > > > IL_0017: ldloc.s 4
> > > > > IL_0019: ldc.i4.1
> > > > > IL_001a: ldloca.s 5
> > > > > IL_001c: initobj [mscorlib]System.Int32
> > > > > IL_0022: ldloc.s 5
> > > > > IL_0024: box [mscorlib]System.Int32
> > > > > IL_0029: stelem.ref
> > > > > IL_002a: ldloc.s 4
> > > > > IL_002c: ldc.i4.2
> > > > > IL_002d: newobj instance void class
> [corlib]System.Exception::.ctor()
> > > > > IL_0032: stelem.ref
> > > > > IL_0033: ldloc.s 4
> > > > > IL_0035: stloc.0
> > > > > IL_0036: ldloc.0
> > > > > IL_0037: ldc.i4.0
> > > > > IL_0038: ldelem.ref
> > > > > IL_0039: stloc.1
> > > > > IL_003a: ldloc.1
> > > > > IL_003b: call void class
[corlib]System.Console::WriteLine(object)
> > > > > IL_0040: ldloc.0
> > > > > IL_0041: ldc.i4.1
> > > > > IL_0042: ldelem.ref
> > > > > IL_0043: unbox [mscorlib]System.Int32
> > > > > IL_0048: ldind.i4
> > > > > IL_0049: box [mscorlib]System.Int32
> > > > > IL_004e: stloc.2
> > > > > IL_004f: ldloc.2
> > > > > IL_0050: call void class
[corlib]System.Console::WriteLine(object)
> > > > > IL_0055: ldloc.0
> > > > > IL_0056: ldc.i4.2
> > > > > IL_0057: ldelem.ref
> > > > > IL_0058: castclass [mscorlib]System.Exception
> > > > > IL_005d: stloc.3
> > > > > IL_005e: ldloc.3
> > > > > IL_005f: call void class
[corlib]System.Console::WriteLine(object)
> > > > > IL_0064: ret
> > > > > } // end of method programa::instance default void .ctor()
> > > > >
> > > > > // method line 2
> > > > > .method public static
> > > > > default void Main() cil managed
> > > > > {
> > > > > // Method begins at RVA 0x215d
> > > > > .entrypoint
> > > > > // Code size 1 (0x1)
> > > > > .maxstack 8
> > > > > IL_0000: ret
> > > > > } // end of method programa::default void Main()
> > > > >
> > > > > } // end of type programa
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > "Michael Giagnocavo [MVP]" escribió en


el
> > > mensaje
> > > > > news:%23%
> > > > > > using System;
> > > > > > class c1 {
> > > > > > public static void Main() {
> > > > > > object[] arreglo = new object[] { new Exception(), new
Int32(),
> > new
> > > > > > Object() };
> > > > > > }
> > > > > > }
> > > > > >
> > > > > > Compilar con CSC. ILDASM:
> > > > > > .method public hidebysig static void Main() cil managed
> > > > > > {
> > > > > > .entrypoint
> > > > > > // Code size 35 (0x23)
> > > > > > .maxstack 3
> > > > > > .locals init (object[] V_0,
> > > > > > object[] V_1)
> > > > > > IL_0000: ldc.i4.3
> > > > > > IL_0001: newarr [mscorlib]System.Object
> > > > > > IL_0006: stloc.1
> > > > > > IL_0007: ldloc.1
> > > > > > IL_0008: ldc.i4.0
> > > > > > IL_0009: newobj instance void
> > > [mscorlib]System.Exception::.ctor()
> > > > > > IL_000e: stelem.ref
> > > > > > IL_000f: ldloc.1
> > > > > > IL_0010: ldc.i4.1
> > > > > > IL_0011: ldc.i4.0
> > > > > > IL_0012: box [mscorlib]System.Int32
> > > > > > IL_0017: stelem.ref
> > > > > > ...
> > > > > > IL_0022: ret
> > > > > > } // end of method c1::Main
> > > > > >
> > > > > > Dime, donde esta el box para el Exception? Boxing solo existe
> para
> > > > > > ValueTypes. Como puedes ver, para tipos referencia, no es
> necesario
> > > > hacer
> > > > > > un box. Ni es posible.
> > > > > >
> > > > > > -mike
> > > > > > MVP
> > > > > >
> > > > > >
> > > > > > "Juan Cristóbal Olivares C." wrote in
message
> > > > > > news:
> > > > > > > No es así. Cuando un tipo es transformado a un tipo base,
> también
> > se
> > > > > > realiza
> > > > > > > un boxing.
> > > > > > >
> > > > > > > "Michael Giagnocavo [MVP]" escribió
en
> el
> > > > > mensaje
> > > > > > > news:uNg$
> > > > > > > > > object[] arreglo = new object { new Exception (), new
Int32
> > (),
> > > > new
> > > > > > > Object
> > > > > > > > > () };
> > > > > > > > >
> > > > > > > > > Todos los elementos son almacenados como objects, pero
aquí
> > hay
> > > > dos
> > > > > > > > > problemas:
> > > > > > > > >
> > > > > > > > > 1.- Rendimiento: los elementos tienen que ser


encapsulados
> > > > (boxing)
> > > > > > > hacia
> > > > > > > > > object y, para volver a usarlos, hay que


desencapsularlos.
> > Esto
> > > > baja
> > > > > > el
> > > > > > > > > rendimiento de la aplicación.
> > > > > > > >
> > > > > > > > Bueno, solo los ValueTypes tendran que ser boxeados (el
Int32
> en
> > > > este
> > > > > > > caso).
> > > > > > > > Los otros elementos (tipos referencia) seran almacenados
> > > > directamente
> > > > > > > > (stelem.ref).
> > > > > > > >
> > > > > > > > -mike
> > > > > > > > MVP
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Respuesta Responder a este mensaje
#15 Michael Giagnocavo [MVP]
08/11/2003 - 19:57 | Informe spam
no voy a discutir contigo...



Buena idea.

basta con que hagas unos benchmarks



Perfecto! Ahi va el archivo .cs. Hace pruebas de meter y sacar objetos (un
string) y ints a un ArrayList y despues a un List<T>.

Te gustaron los resultados? Use la version 1.2.30703 del Framework.

Elapsed time for Refs with ArrayList (16777216 iterations):
00:00:00.3069657
Elapsed time for Ints with ArrayList (16777216 iterations):
00:00:03.0303180
Elapsed time for Refs with List<T> (16777216 iterations):
00:00:00.3553765
Elapsed time for Ints with List<T> (16777216 iterations):
00:00:00.2043779

Como notas, los generics ayudan a los tipos de valores porque no hay que
hacer el box y unbox (costoso porque esto genera un nuevo objeto). No
ayudan mucho a los tipos de referencia, porque un castclass no tiene mucho
costo.

Preguntas o comentarios?

(Yo tengo un P4c 3GHz , pero solo el 533MHz FSB (512MB Dual channel DDR333
RAM)).

-mike
MVP



"Michael Giagnocavo [MVP]" escribió en el mensaje
news:e%
> Generics daran mas rendimiento cuando usas *valuetypes* (porque ya no


hay
> que hacer boxing). Con los reference types, ahorras el castclass cuando
> sacas un objeto.
>
> Creo que estas un poco confundido con todos estos terminos. No necesito
> buscar mas informacion, ya que tengo casi 3 anios trabajando con .NET, y
un
> rato usando generics en C#.
>
> -mike
> MVP
>
> "Juan Cristóbal Olivares C." wrote in message
> news:
> > Sí hay problemas de rendimiento. Por favor busca información acerca de
los
> > genéricos.
> >
> > "Michael Giagnocavo [MVP]" escribió en el
mensaje
> > news:%
> > > > Ya lo dejé claro en un mensaje anterior:
> > > >
> > > > "debí utilizar la palabra Casting en vez de Boxing"
> > >
> > > Si, el mensaje que llego despues de que envie el mio :).
> > >
> > > Aun asi, no tienes que el opcode castclass para meter un tipo
referencia
> > en
> > > un objeto. No hay ningun problema de rendimiento al meter un tipo
> > > referencia en un array de objeto[]. Eso era el punto. No pasa


boxing
> ni
> > > casting ni asi, solo un stelem.ref, como dije.
> > >
> > > De hecho, si quieres ser tecnico (este hilo es algo tecnico no?) ni
> tienes
> > > que usar castclass cuando sacas algo de un object[]. castclass


sirve
> para
> > > que tu codigo sea verficable, pero es posible en IL. C# no lo
generara,
> > > pero el CLR lo soporta.
> > >
> > > Gracias,
> > > -mike
> > > MVP
> > >
> > >
> > > "Juan Cristóbal Olivares C." wrote in message
> > > news:
> > >
> > > >
> > > > "Michael Giagnocavo [MVP]" escribió en el
> > mensaje
> > > > news:
> > > > > > Al hacer un cast desde object al tipo original es necesario
hacer
> > una
> > > > > > conversión.
> > > > >
> > > > > ESO si, pero no tiene NADA que ver al respeto de boxing (solo


con
> los
> > > > > valuetypes tendras un unbox), ni al guardar un tipo referencia


en
un
> > > array
> > > > > object[].
> > > > >
> > > > > -mike
> > > > > MVP
> > > > >
> > > > >
> > > > > > Nota: Esto se evita con el uso de genéricos.
> > > > > >
> > > > > > .assembly extern mscorlib
> > > > > > {
> > > > > > .ver 1:0:3300:0
> > > > > > }
> > > > > > .assembly '13'
> > > > > > {
> > > > > > .hash algorithm 0x00008004
> > > > > > .ver 0:0:0:0
> > > > > > }
> > > > > > .class private auto ansi beforefieldinit programa
> > > > > > extends [mscorlib]System.Object
> > > > > > {
> > > > > >
> > > > > > // method line 1
> > > > > > .method public hidebysig specialname rtspecialname
> > > > > > instance default void .ctor() cil managed
> > > > > > {
> > > > > > // Method begins at RVA 0x20ec
> > > > > > // Code size 101 (0x65)
> > > > > > .maxstack 7
> > > > > > .locals init (
> > > > > > object[] V_0,
> > > > > > object V_1,
> > > > > > object V_2,
> > > > > > object V_3,
> > > > > > object[] V_4,
> > > > > > int32 V_5)
> > > > > > IL_0000: ldarg.0
> > > > > > IL_0001: call instance void valuetype
> > [corlib]System.Object::.ctor()
> > > > > > IL_0006: ldc.i4.3
> > > > > > IL_0007: newarr [mscorlib]System.Object
> > > > > > IL_000c: stloc.s 4
> > > > > > IL_000e: ldloc.s 4
> > > > > > IL_0010: ldc.i4.0
> > > > > > IL_0011: newobj instance void valuetype
> > > [corlib]System.Object::.ctor()
> > > > > > IL_0016: stelem.ref
> > > > > > IL_0017: ldloc.s 4
> > > > > > IL_0019: ldc.i4.1
> > > > > > IL_001a: ldloca.s 5
> > > > > > IL_001c: initobj [mscorlib]System.Int32
> > > > > > IL_0022: ldloc.s 5
> > > > > > IL_0024: box [mscorlib]System.Int32
> > > > > > IL_0029: stelem.ref
> > > > > > IL_002a: ldloc.s 4
> > > > > > IL_002c: ldc.i4.2
> > > > > > IL_002d: newobj instance void class
> > [corlib]System.Exception::.ctor()
> > > > > > IL_0032: stelem.ref
> > > > > > IL_0033: ldloc.s 4
> > > > > > IL_0035: stloc.0
> > > > > > IL_0036: ldloc.0
> > > > > > IL_0037: ldc.i4.0
> > > > > > IL_0038: ldelem.ref
> > > > > > IL_0039: stloc.1
> > > > > > IL_003a: ldloc.1
> > > > > > IL_003b: call void class
> [corlib]System.Console::WriteLine(object)
> > > > > > IL_0040: ldloc.0
> > > > > > IL_0041: ldc.i4.1
> > > > > > IL_0042: ldelem.ref
> > > > > > IL_0043: unbox [mscorlib]System.Int32
> > > > > > IL_0048: ldind.i4
> > > > > > IL_0049: box [mscorlib]System.Int32
> > > > > > IL_004e: stloc.2
> > > > > > IL_004f: ldloc.2
> > > > > > IL_0050: call void class
> [corlib]System.Console::WriteLine(object)
> > > > > > IL_0055: ldloc.0
> > > > > > IL_0056: ldc.i4.2
> > > > > > IL_0057: ldelem.ref
> > > > > > IL_0058: castclass [mscorlib]System.Exception
> > > > > > IL_005d: stloc.3
> > > > > > IL_005e: ldloc.3
> > > > > > IL_005f: call void class
> [corlib]System.Console::WriteLine(object)
> > > > > > IL_0064: ret
> > > > > > } // end of method programa::instance default void .ctor()
> > > > > >
> > > > > > // method line 2
> > > > > > .method public static
> > > > > > default void Main() cil managed
> > > > > > {
> > > > > > // Method begins at RVA 0x215d
> > > > > > .entrypoint
> > > > > > // Code size 1 (0x1)
> > > > > > .maxstack 8
> > > > > > IL_0000: ret
> > > > > > } // end of method programa::default void Main()
> > > > > >
> > > > > > } // end of type programa
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > "Michael Giagnocavo [MVP]" escribió


en
el
> > > > mensaje
> > > > > > news:%23%
> > > > > > > using System;
> > > > > > > class c1 {
> > > > > > > public static void Main() {
> > > > > > > object[] arreglo = new object[] { new Exception(), new
> Int32(),
> > > new
> > > > > > > Object() };
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > > Compilar con CSC. ILDASM:
> > > > > > > .method public hidebysig static void Main() cil managed
> > > > > > > {
> > > > > > > .entrypoint
> > > > > > > // Code size 35 (0x23)
> > > > > > > .maxstack 3
> > > > > > > .locals init (object[] V_0,
> > > > > > > object[] V_1)
> > > > > > > IL_0000: ldc.i4.3
> > > > > > > IL_0001: newarr [mscorlib]System.Object
> > > > > > > IL_0006: stloc.1
> > > > > > > IL_0007: ldloc.1
> > > > > > > IL_0008: ldc.i4.0
> > > > > > > IL_0009: newobj instance void
> > > > [mscorlib]System.Exception::.ctor()
> > > > > > > IL_000e: stelem.ref
> > > > > > > IL_000f: ldloc.1
> > > > > > > IL_0010: ldc.i4.1
> > > > > > > IL_0011: ldc.i4.0
> > > > > > > IL_0012: box [mscorlib]System.Int32
> > > > > > > IL_0017: stelem.ref
> > > > > > > ...
> > > > > > > IL_0022: ret
> > > > > > > } // end of method c1::Main
> > > > > > >
> > > > > > > Dime, donde esta el box para el Exception? Boxing solo


existe
> > para
> > > > > > > ValueTypes. Como puedes ver, para tipos referencia, no es
> > necesario
> > > > > hacer
> > > > > > > un box. Ni es posible.
> > > > > > >
> > > > > > > -mike
> > > > > > > MVP
> > > > > > >
> > > > > > >
> > > > > > > "Juan Cristóbal Olivares C." wrote in
> message
> > > > > > > news:
> > > > > > > > No es así. Cuando un tipo es transformado a un tipo base,
> > también
> > > se
> > > > > > > realiza
> > > > > > > > un boxing.
> > > > > > > >
> > > > > > > > "Michael Giagnocavo [MVP]"


escribió
> en
> > el
> > > > > > mensaje
> > > > > > > > news:uNg$
> > > > > > > > > > object[] arreglo = new object { new Exception (), new
> Int32
> > > (),
> > > > > new
> > > > > > > > Object
> > > > > > > > > > () };
> > > > > > > > > >
> > > > > > > > > > Todos los elementos son almacenados como objects, pero
> aquí
> > > hay
> > > > > dos
> > > > > > > > > > problemas:
> > > > > > > > > >
> > > > > > > > > > 1.- Rendimiento: los elementos tienen que ser
encapsulados
> > > > > (boxing)
> > > > > > > > hacia
> > > > > > > > > > object y, para volver a usarlos, hay que
desencapsularlos.
> > > Esto
> > > > > baja
> > > > > > > el
> > > > > > > > > > rendimiento de la aplicación.
> > > > > > > > >
> > > > > > > > > Bueno, solo los ValueTypes tendran que ser boxeados (el
> Int32
> > en
> > > > > este
> > > > > > > > caso).
> > > > > > > > > Los otros elementos (tipos referencia) seran almacenados
> > > > > directamente
> > > > > > > > > (stelem.ref).
> > > > > > > > >
> > > > > > > > > -mike
> > > > > > > > > MVP
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
>






begin 666 Class1.cs
M=7-I;F<@4WES=&5M.PT*=7-I;F<@4WES=&5M+D-O;&QE8W1I;VYS.PT*=7-I
M;F<@4WES=&5M+D-O;&QE8W1I;VYS+D=E;F5R:6,[#0IU<VEN9R!3>7-T96TN
M1&EA9VYO<W1I8W,[#0H-"FYA;65S<&%C92!T97-T('L-"@EC;&%S<R!#;&%S
M<S$@>PT*"0EP<FEV871E(&-O;G-T(&EN="!.54U?251%4D%424].4R ](#$P
M,# P,# [#0H-"@D)9&5L96=A=&4@=F]I9"!B96YC:&UA<FLH:6YT(&ET97)A
M=&EO;G,I.PT*#0H)"5M35$%4:')E861=#0H)"7-T871I8R!V;VED($UA:6XH
M*2![#0H)"0DO+R!*250@=&AE(&UE=&AO9',-"@D)"6%D9%)E9G-4;T%R<F%Y
M3&ES="@Q*3L-"@D)"6%D9$EN='-4;T%R<F%Y3&ES="@Q*3L-"@D)"6%D9%)E
M9G-4;T=E;F5R:6-,:7-T*#$I.PT*"0D)861D26YT<U1O1V5N97)I8TQI<W0H
M,2D[#0H)"0E097)F;W)M0F5N8VAM87)K*&%D9%)E9G-4;T%R<F%Y3&ES="P@
M,2P@(D5N<W5R92!EõR>71H:6YG(&ES($I)5"=D(BD[#0H-"@D)"2\O($-L
M96%N('5P#0H)"0E#;VYS;VQE+D-L96%R*"D[#0H)"0E'0RY#;VQL96-T*"D[
M#0H-"@D)"2\O($1O('1E<W1S#0H)"0E097)F;W)M0F5N8VAM87)K*&%D9%)E
M9G-4;T%R<F%Y3&ES=")!5$E/3E,L(")2969S('=I=&@@07)R
M87E,:7-T(BD[#0H)"0E097)F;W)M0F5N8VAM87)K*&%D9$EN='-4;T%R<F%Y
M3&ES=")!5$E/3E,L("));G1S('=I=&@@07)R87E,:7-T(BD[
M#0H)"0E097)F;W)M0F5N8VAM87)K*&%D9%)E9G-4;T=E;F5R:6-,:7-T+"!.
M54U?251%4D%424].4RP@(E)E9G,@=VET:"!,:7-T/%0^(BD[#0H)"0E097)F
M;W)M0F5N8VAM87)K*&%D9$EN='-4;T=E;F5R:6-,:7-T+"!.54U?251%4D%4
M24].4RP@(DEN=',@=VET:"!,:7-T/%0^(BD["0T*"0D)#0H)"0DO+R!&:6YI
M<VAE9 T*"0D)0V]N<V]L92Y7<FET94QI;F4H(D%L;"!T97-T<R!D;VYE+B!0
M<F5S<R!E;G1E<B!T;R!QnT+B(I.PT*"0D)0V]N<V]L92Y296%D3&
M.PT*"0E]#0H-"@T*"0ES=&%T:6,@=F]I9"!097)F;W)M0F5N8VAM87)K*&)E
M;F-H;6%R:R!M971H;V0L(&EN="!I=&5R871I;VYS+"!S=')I;F<@9&5S8RD@
M>PT*"0D)+R\@4')E<&%R90T*"0D)0V]N<V]L92Y&;W)E9W)O=6YD0V]L;W(@
M/2!#;VYS;VQE+D)A8VMG<F]U;F1#;VQO<CL-"@T*"0D)4W1O<'=A=&-H('-T
M(#T@;F5W(%-T;W!W871C:"@I.PT*#0H)"0E'0RY#;VQL96-T*"D[#0H-"@D)
M"2\O1V\A#0H)"0ES="Y3=&%R="@I.PT*"0D);65T:&]D*&ET97)A=&EO;G,I
M.PT*"0D)<W0N4W1O<"@I.PT*#0H)"0DO+R!297-U;'1S#0H)"0E#;VYS;VQE
M+D9O<F5G<F]U;F1#;VQO<B ]($-O;G-O;&5#;VQO<BY'<F5E;CL-"@D)"4-O
M;G-O;&4N5W)I=&5,:6YE*")<<EQN16QA<'-E9"!T:6UE(&9O<B![,'T@*'LQ
M?2!I=&5R871I;VYS*3I<='LR?2(L(&1E<V,L(&ET97)A=&EO;G,L('-T+D5L
M87!S960I.PT*"0D)0V]N<V]L92Y297-E=$-O;&]R*"D[#0H)"7T-"@T*#0H)
M"7-T871I8R!V;VED(&%D9%)E9G-4;T%R<F%Y3&ES="AI;G0@:71E<F%T:6]N
M<RD@>PT*"0D)07)R87E,:7-T(&P@/2!N97<@07)R87E,:7-T*&ET97)A=&EO
M;G,I.PT*"0D)4W1R:6YG(',@/2!3=')I;F<N16UP='D[#0H)"0EF;W(@*&EN
M="!I(#T@,#L@:2 \(&ET97)A=&EO;G,[(&DK*RD@>PT*"0D)"6PN061D*%-T
M<FEN9RY%;7!T>2D[#0H)"0D)<R ]("A3=')I;F<I;%MI73L)+R\@0V%S="!A
M;B!O8FIE8W0@;W5T#0H)"0E]#0H)"0E#;VYS;VQE+E=R:71E*")[,'U[,7TB
M+"!S+E1O4W1R:6YG*"DL(&PN0V]U;G0I.PT*"0E]#0H-"@T*"0ES=&%T:6,@
M=F]I9"!A9&1);G1S5&]!<G)A>4QI<W0H:6YT(&ET97)A=&EO;G,I('L-"@D)
M"4%R<F%Y3&ES="!L(#T@;F5W($%R<F%Y3&ES="AI=&5R871I;VYS*3L-"@D)
M"6EN="!X(#T@+3$[#0H)"0EF;W(@*&EN="!I(#T@,#L@:2 \(&ET97)A=&EO
M;G,[(&DK*RD@>PT*"0D)"6PN061D*&EN="Y-:6Y686QU92D[#0H)"0D)>" ]
M("AI;G0I;%MI73L)+R\@56YB;W@@86X@:6YT(&]U= T*"0D)?0T*"0D)0V]N
M<V]L92Y7S!]>S%](BP@>"Y4;U-T+"!L+D-O=6YT*3L-
M"@D)?0T*#0H-"@D)<W1A=&EC('9O:<U1O1V5N97)I8TQI<W0H
M:6YT(&ET97)A=&EO;G,I('L-"@D)"4QI<W0\4W1R:6YG/B!L(#T@;F5W($QI
M<W0\4W1R:6YG/BAI=&5R871I;VYS*3L-"@D)"5-T<FEN9R!S(#:6YG
M+D5M<'1Y.PT*"0D)9F]R("AI;G0@:2 ](# [(&D@/"!I=&5R871I;VYS.R!I
M*RLI('L-"@D)"0EL+D%D9"A3=')I;F<N16UP='DI.PT*"0D)"7,@/2!L6VEM.PDO+R!'970@<W1R:6YG(&]U="P@;F\@8V%S=&EN9R!N965D960-"@D)"7T-
M"@D)"4-O;G-O;&4N5W)I=&4H(GLP?7LQ?2(L(',N5&]3=')I;F<H*2P@;"Y#
M;W5N="D[#0H)"7T-"@T*#0H)"7-T871I8R!V;VED(&%D9$EN='-4;T=E;F5R
M:6-,:7-T*&EN="!I=&5R871I;VYS*2![#0H)"0E,:7-T/&EN=#X@;" ](&YE
M=R!,:7-T/&EN=#XH:71E<F%T:6]N<RD[#0H)"0EI;G0@>" ]("TQ.PT*"0D)
M9F]R("AI;G0@:2 ](# [(&D@/"!I=&5R871I;VYS.R!I*RLI('L-"@D)"0EL
M+D%D9"AI;G0N36EN5F%LdI.PT*"0D)"7@@/2!L6VE=.PT*"0D)?0T*"0D)
M0V]N<V]L92Y7S!]>S%](BP@>"Y4;U-T+"!L+D-O=6YT
0*3L-"@D)?0T*"7T-"GT-"@``
`
end
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida