Continua il massacro tra VB e C#

di Andrea Zani, in .NET,

Visto che anche Daniele nel suo blog ne ha parlato, continuo a parlare di differenze, anzi, per meglio dire, dei butti vizi che il VB porta nello sviluppo - dico così perché a suo tempo usavo anche io la tecnica che esporrò più avanti.

In un mio blog mi ero lamentato della possibilità - permessa agli sviluppatori in vb.net per facilitare il lavoro - di utilizzare inconsapevolmente il latebinding per le conversione dei tipi. Un'ottima spiegazione tecnica a riguardo la si trova nel sempretecnino Ricciolo! :) Oltre all'inconsapevolezza c'è anche l'esperienza che può portare dei problemi prestazionali nel proprio codice. Chi proviene dai vari dialetti del VB sa che sono presenti comandi appositi per le varie conversioni. Per esempio, per convertire i numeri presenti una stringa in integer è sufficiente utilizzare il comando cint, per convertire un numero in stringa, cstr e così via per i vari tipi:

dim a as integer
a=Cint("12")
...
dim a as string
a=Cstr(12)

Il Framework, dal canto suo, implementa già al suo interno delle classi apposite per le conversioni, come la Convert o il canonico ToString(). Per esempio:

dim a as integer
a=Convert.ToInt32("12")
...
dim a as string
a=12.ToString()

E così via... Ma quale di queste tecniche è la più prestazionale? L'utilizzo dei comandi interni del VB o le classi all'interno del Framework?

Nel primo caso, l'utilizzo della classe Convert al posto delle funzioni cint, cdbl, ecc... aumenta le prestazioni del 100% da prove effettuate personalmente. Mentre le prestazioni sono pressocché simili tra la funzione cstr e la conversione diretta con il ToString().

Ma andiamo più a fondo: vediamo il codice prodotto dal Framework dopo la compilazione per la funzione cint:

Dim num1 As Integer
num1 = IntegerType.FromString("12")

IntegerType è una classe interna del VisualBasic, dunque non è possibile invertigare oltre. L'implementazione dello stesso codice con la classe Convert non rivela sorprese nel codice prodotto dal compilatore e permette, come già detto, l'aumento di prestazioni del 100% (provare per credere!).

La funzione cstr che, ripeto, ha prestazione pressocché identiche al ToString() fa produrre al compilatore questo codice:

Dim text1 As String
text1 = StringType.FromInteger(12)

Anche in questo caso la classe StringType è interna e non è possibile andare oltre.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese