Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Concatenazione efficiente di stringhe in VB 2005

Contrariamente a quanto si potrebbe pensare, il tipo di dato System.String del .NET Framework non è un tipo valore, bensì un tipo riferimento. Questo può influenzare le operazioni che vengono compiute sulle stringhe; anche una semplice concatenazione, infatti, può sprecare inutilmente dei cicli di CPU se effettuata in un modo non corretto. Si consideri il seguente codice:

Dim MyString As String

MyString = "Il mio nome è "

MyString += "Alessandro "

MyString += "Del Sole"

In questo codice solo l'ultima stringa ha l'effettivo riferimento e il compilatore non fa una concatenazione di stringhe, bensì crea 3 nuove stringhe. La Garbage Collection interverrà poi ad eliminare le prime due non più utili. Creare tre stringhe e richiamare poi la Garbage Collection significa quindi in primo luogo sprecare memoria, in secondo luogo minore velocità (dovuta all'intervento della GC).

Fortunatamente .NET 2.0 espone dei metodi alternativi che consentono la concatenazione di stringhe in modo efficiente, ossia il metodo condiviso String.Concat e la classe StringBuilder. Lo stesso risultato del codice precedente si può ottenere così:

Dim MyString As New System.Text.StringBuilder(3)

MyString.Append("Il mio nome è ")

MyString.Append("Alessandro ")

MyString.Append("Del Sole")

'Aggiungere eventualmente la seguente riga per convertire l'oggetto StringBuilder in String

Dim S As String = MyString.ToString

Nel costruttore dell'oggetto è possibile anche specificare una dimensione minima e una massima. Se non specificata, viene assegnato una grandezza di default di 16 bytes che viene incrementata automaticamente a seconda delle necessità.

Infine, il metodo String.Concat:

Dim MyString As String

MyString = String.Concat("Il mio nome è ", "Alessandro ", "Del Sole")

In sintesi String.Concat e StringBuilder evitano sprechi di memoria e inutili interventi da parte del Garbage Collector di .NET.

Alessandro

Print | posted on mercoledì 3 gennaio 2007 21:14 | Filed Under [ .NET Framework ]

Powered by:
Powered By Subtext Powered By ASP.NET