|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 1047
|
[Guida alle funzioni avanzate] - C#
Inizio inserendo qualche piccolo contributo.
Prestazioni Esistono dei programmi chiamati profiler che permettono di analizzare il codice di un programma per trovare i colli di bottiglia. Forniscono in output il numero di volte che un'istruzione viene eseguita e il tempo impiegato (non è affidabilissimo). Stringhe in cicli for Se dovete eseguire un'istruzione mille volte la classe string non è adatta. Vi faccio un esempio. Per tutti i file di un direttorio (1000) carica il testo in una stringa ed elimina i doppi spazi. Un modo di farlo è eseguire while(trovato_spazio_doppio) { stringa = stringa.Replace(" "," "); } Metodo in realtà pessimo e capace di impallarvi il computer per 20 secondi (per 100 file)! Il metodo corretto è usare la classe StringBuilder. Es. StringBuilder stringa2 = new StringBuilder(stringa2) while(trovato_spazio_doppio) { stringa2.Replace(" "," "); } si noti che mentre le stringhe sono oggetti immutabili passate sempre e solo per valore, gli oggetti StringBuilder sono passati solo ed esclusivamente per riferimento. scrivere strnga2 = stringa2.Replace(" "," ") è un errore (in quanto rallenta di una decina di volte l'esecuzione del codice e non introduce alcuna differenza) Utilizzare un oggetto modificandolo ma recuperare una copia intatta di esso alla fine del task Se utilizzate un oggetto modificandone i campi perderete i valori originali. Anche se credevate di averli salvati. Per la precisione questo avviene se la modifica è fatta per riferimento. Es. object backup = originale; ModificaPerRiferimento(originale); originale = backup; //scopro che originale è cambiato insieme a backup |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:44.