Visual Basic Simple
Capienza massima di una Textbox
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo

Difficoltà: 2 / 5

Le caselle di testo di Visual Basic possono contenere qualsiasi stringa di testo ma, negli ambienti Windows 9x esiste un limite massimo di caratteri che possono contenere. Nei sistemi Windows NT questo limite è dettato da due fattori: memoria libera disponibile e tipologia di utilizzo dei dati.

Dimostreremo in questo articolo il numero massimo di caratteri che una Textbox è in grado di contenere. La guida di VB si esprime con queste parole: "L'impostazione di Text per un controllo TextBox può contenere al massimo 2048 caratteri, a meno che la proprietà MultiLine non sia True. In quest'ultimo caso il limite massimo è di circa 32K". Tuttavia la realtà non è proprio così semplice.

Figura 1Utilizzeremo un progetto molto semplice per dimostrare la capienza massima di due Textbox, una a riga singola ed una multiriga.

In fondo al form ci sono 6 pulsanti divisi in due colonne da tre pulsanti ciascuna. La prima delle due colonne di pulsanti restituisce la dimensione massima della prima casella di testo, quella a riga singola; la seconda colonna di pulsanti effettua gli stessi test sulla casella multiriga.

I tre test eseguono tre rilevazioni molto semplici:

  1. Il primo test effettua un ciclo che concatena alla proprietà Text ad ogni passaggio una stringa di 1024 caratteri. È utilizzata anche un'istruzione di gestione di errori per proseguire l'elaborazione nel caso che la casella di testo superi la capienza massima. Nel momento in cui verrà generato un errore dovuto al superamento della capienza massima, verrà rifatto il controllo ma un blocco di dati più piccolo, in modo da determinare con precisione la capacità massima del controllo.

  2. Il secondo test esegue le medesime operazioni del test precedente ma anziché operare sulla proprietà Text, utilizza la proprietà SelText. Questo test è stato affrontato esclusivamente con una seconda finalità che vedremo in seguito, ma per la nostra elaborazione i risultati saranno esattamente identici.

  3. L'ultimo test effettua la ricerca della capienza massima per tentativi. Verrà inizialmente provata una stringa di 36000 caratteri, che quasi sicuramente produrrà un errore, e verrà ripetuto il test, con una stringa più corta fino a quando la casella di testo smetterà di produrre errori.

Delle tre soluzioni, la terza si presenta come la più lenta, seguita dal test che utilizza la proprietà Text della casella di testo; il secondo test è invece il più veloce. Altresì i test sulla seconda casella di testo saranno più lenti di quelli sulla casella a riga singola.


Lanciamo il nostro programma dimostrativo ed effettuiamo uno per uno tutti i test possibili.

Figura 2Noteremo che nei sistemi Windows 9x i test relativi alla Casella 1 restituiranno tutti il medesimo risultato: lunghezza della casella txtTesto1: 32766 caratteri.

Questo dimostra che la prima realtà va in contrasto con la spiegazione fornita dalla guida in linea di VB vista all'inizio di questo articolo.
Indipendentemente dal numero di volte e dal computer utilizzato per eseguire questi test, l'ampiezza massima di una casella di testo a riga singola è 32766 caratteri.

Nei sistemi Windows NT invece, i test restituiscono dei valori differenti: l'uso della proprietà Text (il primo ed il terzo test, mostrati nella Figura 3) è limitato a 65535 caratteri, mentre l'uso della proprietà SelText (mostrato nella Figura 4) non presenta alcuna limitazione, se non la memoria disponibile. Per il secondo test verrà infatti restituito il risultato 308224, corrispondente a 301 * 1024, ma avrebbe potuto contenere ulteriori caratteri. Abbiamo interrotto volontariamente l'elaborazione dopo 301 esecuzioni del ciclo, che avrebbe potuto continuare ancora per molto tempo.

Figura 3
Figura 3
Figura 4
Figura 4

Figura 5Le casella di testo multiriga si presentano indiscutibilmente più lente di quelle a riga singola.

Nei sistemi Windows 9x qualunque sia il test che eseguiamo il risultato dovrebbe essere sempre lo stesso: il numero massimo di caratteri per una casella di testo multiriga è un numero in genere compreso tra 32000 e 35000. Nel nostro esempio a fianco la dimensione massima è risultata essere 33825 caratteri ma l'esecuzione dello stesso test con condizioni di elaborazione differenti, ad esempio con più o meno programmi aperti potrebbe produrre risultati differenti.

Nei sistemi Windows NT l'operazione riflette i test della casella a riga singola: il primo ed il terzo test restituiscono entrambi il valore 65535 caratteri (vedi Figura 6); il secondo test, che utilizza la proprietà SelText, procede in maniera interminabile. Nella Figura 7 il valore 233472 è simbolico e rappresenta la lunghezza della stringa elaborata fino all'interruzione del progetto, che avrebbe portato via molto tempo, senza produrre alcun risultato utile.

Figura 6
Figura 6
Figura 7
Figura 7

Riepiloghiamo quindi i risultati, differenziandoli per sistema operativo utilizzato:

Test effettuato Windows 9x Windows NT
txtTesto1 con .Text 32766 65535
txtTesto1 con .SelText 32766 Infinito (*)
txtTesto1 a tentativi 32766 65535
txtTesto2 con .Text 32000-35000 65535
txtTesto2 con .SelText 32000-35000 Inifinito (*)
txtTesto2 a tentativi 32000-35000 65535

(*) Infinito indica che non esiste un limite fisso ma la capacità è dettata dalla memoria disponibile nel sistema.


Si raccomanda l'esecuzione di questi test su pc differenti oppure con condizioni differenti, ad esempio all'avvio del sistema operativo potremmo avere un numero maggiore di quello fornito dopo ore di lavoro con il pc.

Attenzione: se il programma dovesse smettere di rispondere e state utilizzando un sistema Windows 9x, si raccomanda di attendere il termine dell'elaborazione. Infatti sui computer più lenti l'elaborazione dei test sulla casella multiriga potrebbe richiedere qualche minuto.

Dall'esecuzione di questi test è palese la differenza di capacità tra le caselle di testo a riga singola e quelle multiriga. Viene altresì dimostrato che le caselle di testo multiriga sono molto più lente di quelle a riga singola.

Nell'esecuzione dei tre test è però dimostrato anche che l'utilizzo della proprietà SelText, come alternativa alla proprietà Text, produce risultati di gran lunga migliori in termini di velocità. Si raccomanda pertanto, quando possibile, la scrittura di dati tramite questa proprietà, anziché usando Text, predefinita per il controllo. L'unico accorgimento da tenere consiste nel verificare la posizione in cui si trova il cursore e, se necessario, azzerare il contenuto della casella di testo prima di concatenare del nuovo testo.

È anche possibile migliorare la velocità di chiusura del nostro programma azzerando le caselle di testo contenenti molti dati, prima di procedere con l'effettivo scaricamento del form, ad esempio sfruttando l'evento  Unload.

Fibia FBI
11 Settembre 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice delle Stranezze