Qual è il modo più veloce per analizzare le stringhe in C#?Analisi rapida delle stringhe in C#
Attualmente sto usando solo l'indicizzazione delle stringhe (string[index]
) e il codice viene eseguito in modo ragionevole, ma non posso fare a meno di pensare che il controllo dell'intervallo continuo che l'accessor di indice deve aggiungere qualcosa.
Quindi, mi chiedo quali tecniche dovrei considerare per dargli una spinta. Questi sono i miei pensieri iniziali/domande:
- utilizzare metodi come
string.IndexOf()
eIndexOfAny()
di trovare caratteri di interesse. Sono più veloci rispetto alla scansione manuale di una stringa dastring[index]
? - Usa regex's. Personalmente, non mi piace regex perché li trovo difficili da mantenere, ma è probabile che siano più veloci della scansione manuale della stringa?
- Utilizzare codice e puntatori non sicuri. Ciò eliminerebbe il controllo del range dell'indice, ma ho letto che il codice non sicuro non verrà eseguito in ambienti non fidati. Quali sono esattamente le implicazioni di questo? Ciò significa che l'intero assembly non verrà caricato/eseguito, o verrà eseguito solo il codice contrassegnato come non sicuro? La libreria potrebbe potenzialmente essere utilizzata in un numero di ambienti, quindi essere in grado di tornare a una modalità più lenta ma più compatibile sarebbe piacevole.
- Cos'altro posso prendere in considerazione?
NB: Devo dire che le stringhe che sto analizzando potrebbero essere ragionevolmente grandi (ad esempio 30k) e in un formato personalizzato per il quale non esiste un parser standard di .NET. Inoltre, l'esecuzione di questo codice non è super-critica, quindi questa è solo una questione di curiosità teorica.
È davvero difficile rispondere se non si forniscono ulteriori dettagli/codice per spiegare cosa esattamente e come si sta "analizzando". – Grzenio
Non intendo essere scortese con te personalmente, ma sembra un'ottimizzazione prematura, il segno rivelatore di un programmatore con istruzione C. Probabilmente hai problemi più urgenti da guardare. – reinierpost
@reinierpost: ti sei perso dove l'OP diceva "in parte solo una questione di curiosità teorica"? – LukeH