Autore Topic: Ho bisogno di accelerare questa parte di codice contenente una Stringa  (Letto 271 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Ho bisogno di accelerare questa parte di codice contenente una Stringa
« Risposta #1 il: 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.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Ho bisogno di accelerare questa parte di codice contenente una Stringa
« Risposta #2 il: 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à.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »