2009-04-04 14 views

risposta

14

In primo luogo, si noti che le stringhe in .NET sono molto diverse dalle stringhe memorizzate in linguaggi non gestiti (come C++) ... Nel CLR, la lunghezza della stringa (in caratteri e in byte) viene infatti memorizzata in memoria in modo che il CLR sappia quanto è grande il blocco di memoria (matrice di caratteri) che contiene la stringa. Questo viene fatto al momento della creazione della stringa e non viene modificato dato che il tipo System.String è immutabile.

In C++ questo è piuttosto diverso, poiché la lunghezza di una stringa viene rilevata leggendo fino al primo carattere nullo. A causa del modo in cui l'utilizzo della memoria funziona nel CLR, si può essenzialmente considerare che ottenere la proprietà Length di una stringa è come recuperare una variabile int. Il costo delle prestazioni qui sarà assolutamente minimo, se è quello che stai considerando.

Se vuoi saperne di più sulle stringhe in .NET, prova con Jon Skeet's article sull'argomento: sembra che abbia tutti i dettagli che potresti voler sapere sulle stringhe in .NET.

1

Sembra che sia una proprietà di stringa, che è probabilmente impostata nel costruttore. Dal momento che non è una funzione, dubito che sia calcolata quando la chiami. Stanno semplicemente ottenendo il valore della proprietà Length.

9

La lunghezza della stringa non è calcolata, è nota al momento della costruzione. Poiché String è immutabile, non sarà necessario calcolarlo in seguito.

Una stringa .NET è memorizzata come un campo contenente il numero di caratteri e una serie corrispondente di caratteri Unicode.

3

Le stringhe .NET vengono memorizzate con la lunghezza pre-calcolata e memorizzate all'inizio della struttura interna, pertanto la proprietà .Length recupera semplicemente tale valore, rendendola una funzione O (1).

+0

Non è "pre-calcolato" tanto quanto la proprietà Length per la classe String immutabile restituisce semplicemente la proprietà Length per la struttura dati sottostante. –

+1

V'è in realtà un numero non memorizzato (nella struttura dati sottostante) che rappresenta la lunghezza della stringa, e il numero esiste come il risultato di un calcolo. Indipendentemente dal fatto che tu abbia mai usato la proprietà Length, quel numero viene sempre calcolato e sempre archiviato nella struttura dati sottostante. Questo è ciò che intendo per "pre-calcolato". – tylerl