Sobre rendimiento de DirectCast y CType

07/10/2004 - 10:00 por LuisMiguel | Informe spam
Buenas
En el caso
dim StA as string ="12"
dim I as integer = CType(StA, Integer)
dim J as integer = DirectCast(StA, Integer)

segun la ayuda, siempre es aconsejable usar el DirectCast, pero advierte que
en este caso genera un error (como efectivamente sucede), pero no me entero
a que se refiere cuando dice

... DirectCast requiere que el tipo de tiempo de ejecucion de una variable
objeto sea el mismo que el tipo especificado ????

que diferencia existe a nivel rendimiento entre usar CType o DirectCast y
usar por ejemplo

dim K as integer = integer.parse(StA,Integer)

Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
07/10/2004 - 13:48 | Informe spam
Hola, Luis:

DirectCast simplemente fuerza que una referencia sea interpretada como una
instancia del tipo que se le pasa como segundo argumento.

Sus usos tipicos son para especificar el tipo de una referencia no tipeada.
Por ejemplo, si miCol es una colección, puedes escribir DirectCast(miCol(n),
miClase) para forzar que el n-simo elemento de miCol sea tratado como una
referencia a una instancia de miClase. Por supuesto, si el n-simo elemento
de miCol no es una instancia de miClase, la "interpretación" fallará. Otro
uso puede ser convertir una referencia a una instancia de una clase base en
una referencia a una instancia de una clase derivada. O para indicar el tipo
concreto de una referencia a una interfaz.

DirectCast no realiza ninguna conversión, simplemente define un "mapa" para
la interpretación de una referencia. En este sentido es mucho más eficiente
que CType.

CType, por su parte, es un operador de conversión genérico. Lo mismo llama a
DirectCast que a cualquiera de las funciones de conversión de tipos
disponible.

CType (al menos cuando se convierte de String a Integer) se implementa
mediante una llamada a Microsoft.VisualBasic; Integer.Parse(string), por su
parte, se resuelve mediante ua llamada a Int32::Parse en mscorlib (que
contiene la libreria de clases basicas -BCL). De manera que las llamadas
<Tipo>.Parse deben ser más eficientes que el uso de CType.

En resumen:
DirectCast es eficientisima, pero solo se puede usar para "refinar" el
tipo de una referencia. Donde se pueda usar, darle prioridad sobre cualquier
otra.
CType es la mas ineficiente de las opciones de conversión. Solo se debe
usar cuando se necesite la flexibilidad que ofrece.
Para convertir de cadenas a numeros, siempre es mejor usar
TipoNumerico.Parse que CType o que cualquiera de las funciones implementadas
en Microsoft.VisualBasic.

Salud!

Leonardo
mvp vb



"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:
Buenas
En el caso
dim StA as string ="12"
dim I as integer = CType(StA, Integer)
dim J as integer = DirectCast(StA, Integer)

segun la ayuda, siempre es aconsejable usar el DirectCast, pero advierte


que
en este caso genera un error (como efectivamente sucede), pero no me


entero
a que se refiere cuando dice

... DirectCast requiere que el tipo de tiempo de ejecucion de una variable
objeto sea el mismo que el tipo especificado ????

que diferencia existe a nivel rendimiento entre usar CType o DirectCast y
usar por ejemplo

dim K as integer = integer.parse(StA,Integer)

Gracias
LuisMiguel


Respuesta Responder a este mensaje
#2 LuisMiguel
09/10/2004 - 19:28 | Informe spam
Gracias Leonardo
mucho mas claro todo.

Suerte
LuisMiguel
"Leonardo Azpurua" <l e o n a r d o (arroba) m v p s (punto) o r g> escribió
en el mensaje news:
Hola, Luis:

DirectCast simplemente fuerza que una referencia sea interpretada como una
instancia del tipo que se le pasa como segundo argumento.

Sus usos tipicos son para especificar el tipo de una referencia no


tipeada.
Por ejemplo, si miCol es una colección, puedes escribir


DirectCast(miCol(n),
miClase) para forzar que el n-simo elemento de miCol sea tratado como una
referencia a una instancia de miClase. Por supuesto, si el n-simo elemento
de miCol no es una instancia de miClase, la "interpretación" fallará. Otro
uso puede ser convertir una referencia a una instancia de una clase base


en
una referencia a una instancia de una clase derivada. O para indicar el


tipo
concreto de una referencia a una interfaz.

DirectCast no realiza ninguna conversión, simplemente define un "mapa"


para
la interpretación de una referencia. En este sentido es mucho más


eficiente
que CType.

CType, por su parte, es un operador de conversión genérico. Lo mismo llama


a
DirectCast que a cualquiera de las funciones de conversión de tipos
disponible.

CType (al menos cuando se convierte de String a Integer) se implementa
mediante una llamada a Microsoft.VisualBasic; Integer.Parse(string), por


su
parte, se resuelve mediante ua llamada a Int32::Parse en mscorlib (que
contiene la libreria de clases basicas -BCL). De manera que las llamadas
<Tipo>.Parse deben ser más eficientes que el uso de CType.

En resumen:
DirectCast es eficientisima, pero solo se puede usar para "refinar" el
tipo de una referencia. Donde se pueda usar, darle prioridad sobre


cualquier
otra.
CType es la mas ineficiente de las opciones de conversión. Solo se


debe
usar cuando se necesite la flexibilidad que ofrece.
Para convertir de cadenas a numeros, siempre es mejor usar
TipoNumerico.Parse que CType o que cualquiera de las funciones


implementadas
en Microsoft.VisualBasic.

Salud!

Leonardo
mvp vb



"LuisMiguel" <lmolinoARROBAyaPUNTOcom> escribió en el mensaje
news:
> Buenas
> En el caso
> dim StA as string ="12"
> dim I as integer = CType(StA, Integer)
> dim J as integer = DirectCast(StA, Integer)
>
> segun la ayuda, siempre es aconsejable usar el DirectCast, pero advierte
que
> en este caso genera un error (como efectivamente sucede), pero no me
entero
> a que se refiere cuando dice
>
> ... DirectCast requiere que el tipo de tiempo de ejecucion de una


variable
> objeto sea el mismo que el tipo especificado ????
>
> que diferencia existe a nivel rendimiento entre usar CType o DirectCast


y
> usar por ejemplo
>
> dim K as integer = integer.parse(StA,Integer)
>
> Gracias
> LuisMiguel
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida