Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Funzione lenta

  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857

    Funzione lenta

    Buonasera a tutti
    ho una funzioncina che mi genera una stringa con un colore rgba casuale.
    Questa funzioncina la lancio in un ciclo nel quale sfoglio un datatable e assegno ad ogni record un colore rgba diverso.
    Bene, mi succede che se eseguo in debug i vari passi del ciclo va tutto bene e trovo in ogni record del datatable un colore diverso ma quando gira per conto suo trovo in datatable tutti i record lo stesso colore...
    Che ho scritto un ciclo "col ciclo"?


    codice:
    protected sub sfoglia(byref dtt as datatable)
                For Each row In dtt.Rows
                   row!opcolore = HexColGenerator(0.3)
                Next
    end sub
    
     Public Shared Function HexColGenerator(ByVal Optional alpha As Decimal = 1) As String
          Dim intR, intG, intB As Integer
          Dim RandomClass As New Random()
          Dim strColor As String = ""
    
          intR = RandomClass.Next(0, 256)
          intG = RandomClass.Next(0, 256)
          intB = RandomClass.Next(0, 256)
         
         RandomClass = Nothing
    
          If alpha < 1 Then
             strColor = "rgba(" & intR.ToString & "," & intG.ToString & "," & intB.ToString & "," & Int(alpha * 255).ToString & ")"
          Else
    
             Dim hexR, hexG, hexB As String
             hexR = intR.ToString("X").PadLeft(2, "0"c)
             hexG = intG.ToString("X").PadLeft(2, "0"c)
             hexB = intB.ToString("X").PadLeft(2, "0"c)
    
    
             strColor = "#" & hexR & hexG & hexB
          End If
          intR = Nothing
          intG = Nothing
          intB = Nothing
    
          Return strColor
       End Function
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    Più veloce del previsto: se la Randomclass la dichiaro fuori dalla funzione come public shared e non la creo e distruggo dentro la funzione funziona.
    Mah...
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    PS la funzioncina ha anche un errore, l'alpha non va convertito in scala da 0 a 255 come ho fatto io ma va usato com'è
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    due domande:

    1. cosa è row!opcolore ?

    2. perche' distruggi la RandomClass ? Sono molte righe ?


    comunque, hai provato a NON passare il datatable per riferimento ?

  5. #5
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,255
    Per la classe random devi usare il seed quando la inizializzi in modo da generare valori pseudoicasuali.
    Per il resto creare e distruggere la classe random come detto sopra potrebbe darti problemi di garbagecollector a lungo andare, passalo alla funzione.

  6. #6
    non capisco il "lenta" del titolo...

  7. #7
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    :-) In effetti era questione di SEED.
    Creando la RandomClass ogni volta nella funzione senza fargli il reseed proponeva sempre lo stesso valore ad ogni ciclo, mettendola invece public e passandola alla funzione il problema non si pone.

    row!opcolore è un campo del datatable che valorizzo con la funzione: il datatable DEVO passarlo byref perchè lo genero da tutt'altra parte (anyway ha si e no 20 records non è un oggetto tanto "grasso" da maneggiare)

    "Lenta" è perchè nel panico in cui ero piombato ero arrivato a pensare che proponesse sempre lo stesso valore rgb perchè il ciclo era più veloce della generazione casuale dei valori!!! sono scemo lo so, tendo a umanizzare le macchine.
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    il datatable puo' avere un campo che si chiama

    row!opcolore ? (intendo con il punto esclamativo)

    mi sembra una BAD practices

  9. #9
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    codice:
    For Each row In dtt.Rows
        row!opcolore = HexColGenerator(0.3)
    Next
    row è una datarow.
    opcolore è il nome di colonna... why bad practice?
    La bad practice semmai è non aver specificato il tipo e aver usato "row" come nome della mia datarow... per fare i pignoli avrei dovuto scriverlo così
    codice:
    For Each miodr as datarow In dtt.Rows
        miodr!opcolore = HexColGenerator(0.3)
    Next
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #10
    Quote Originariamente inviata da supermac Visualizza il messaggio
    :-)
    ....
    nel panico in cui ero piombato ero arrivato a pensare che proponesse sempre lo stesso valore rgb perchè il ciclo era più veloce della generazione casuale dei valori!!!
    ....
    IMHO, nel panico ci avevi preso perchè

    1)
    essendo l'algoritmo di generazione pseudocausale basato sull'ora corrente
    la generazione di valori casuali con diverse istanze di randomclass create a brevissima distanza di tempo
    di fatto portava a valori uguali a quelli della precedente istanza;

    2)
    la creazione di n istanze di randomclass invece di una sola ha il suo peso e rallenta il tutto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.