Gambas-it

Gambas dal mondo esterno => Spagna => Topic aperto da: vuott - 11 Giugno 2021, 16:32:34

Titolo: Ho bisogno di accelerare questa parte di codice contenente una Stringa
Inserito da: vuott - 11 Giugno 2021, 16:32:34
https://gambas-es.org/showthread.php?tid=454
Titolo: Re:Ho bisogno di accelerare questa parte di codice contenente una Stringa
Inserito da: pastrank - 13 Giugno 2021, 03:55:34
https://gambas-es.org/showthread.php?tid=454

 :) volendo togliere cio' che non e' numero, e vedendo una riga come
Codice: [Seleziona]
If IsDigit(cadena[n]) Or If cadena[n] = "." Or If cadena[n] = "," Or If cadena[n] = "-" Then sCadena &= cadena[n]
mi sono detto: impossibile non riuscire a ottimizzarla, sicuramente ogni volta ricalcolera' tutte le condizioni, e invece non ci sono riuscito. Allora mi sono messo a scriverlo un po' piu' leggibile
Codice: [Seleziona]
    Public Function soloNumeros(cadena As String) As String
     
       Dim n As Integer
       Dim res As String = ""
       
       For n = 0 To Len(cadena) - 1
          If InStr("0123456789.-", cadena[n]) Then res &= cadena[n]
       Next
       
       Return IIf(res = "", "0", res)
     
    End
E ancora si rimaneva sui soliti tempi, leggermente superiori i miei. Poi, e qui viene il curioso secondo me, mi sono accorto che una grossa differenza, invece, viene dall'usare l'if ... then all'interno del for tutto su una riga o usarlo su tre con l'endif finale :-) Anche l'IIf sembra non danneggiare, ma quasi avvantaggiare la velocita'. Cosi' mi risulta pero' solo un risparmio del 10% del tempo.
Non so se e' verita' assoluta, pero' dalla decina di prove che ho fatto mi torna in questo modo, usando una serie di stringhe lunghe una 15ina di caratteri e ripetendo parecchie volte la chiamata alla funzione. Di sicuro sono cambiati i compilatori da quando facevo le stesse cose con il Visual Basic.
Titolo: Re:Ho bisogno di accelerare questa parte di codice contenente una Stringa
Inserito da: vuott - 13 Giugno 2021, 22:24:51
Io ho sempre saputo che in via generale l'uso delle funzioni stringa non è la scelta migliore per la velocità.