Ancora colto dai dubbi (rafforzati da abuso del panettone di questi giorni) mi sono messo a fare dei confronti per le varie conversioni. Sotto esame ho messo la conversione da stringa a DateTime. Il modo più semplice, se si usa il Visual Basic, è scrivere:
if isDate("12/12/2000") then ' è una data else ' non è una data end if
Nel caso del C# che non ha la funzione isdate dobbiamo arrangiarci con il costrutto try...catch:
try { DateTime data=DateTime.Parse("12/12/2000"); } catch { // non è una data }
Dal Framework 2 sarà presente una funzione interna del framework per le varie conversioni (anche tra integer, double, ecc...), TryParse:
DateTime data; if (!DateTime.TryParse("12/12/2000", out data)) { // non è una data }
E via con il test delle prestazioni... Ecco la classifica dopo un pesantissimo test con il tentativo di inserimento di una data corretta:
- DateTime.TryParse: 0,001550
- IsDate: 0,001690 s
- Try...Catch: 0,001950 s
Ecco in caso di data sbagliata:
- DateTime.TryParse: 0,003121 s
- IsDate: 0,003340 s
- Try...catch: 0,855457
In ogni caso il TryParse è leggermente più veloce di "IsDate". Il costrutto "try... catch" è accettabile in caso di data corretta, ma in caso inverso è un disastro (dovuto alla sollevazione di una eccezione). Sto guardando ora il codice, e nel caso del "TryParse" sto scoprendo una intricata routine che controlla la stringa in tutti i suoi dettagli per il controllo della data. Ottimo.
Buone feste e buon anno.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Un po' di benchmark tra Linq, Entity Framework e Nhibernate, il 12 ottobre 2008 alle 14:46
- UrlRewriting con trabocchetti vari, l'11 dicembre 2007 alle 21:00
- Windows Forms - DataGridView e validazione, il 23 settembre 2007 alle 20:08
- ControlParameter e masterpage... bug?, il 23 dicembre 2006 alle 15:58
- Se Visual Studio 2005 non accetta più la tastiera, il 16 dicembre 2006 alle 20:45
- Service Pack 1 di Visual Studio 2005, il 16 dicembre 2006 alle 20:35