Oppure

Loading
27/04/12 4:36
magicolotto
Ciao ed un ben ritrovati a tutti....
Come da titolo avrei necessità di velocizzare un codice che agisce su un archivio acces..
Questo ricava frequeza e ritardi ( storico ed attuale ) di tutti gli ambi sul 10 e lotto 5 minuti...
ci sono circa 190 mila estrazioni
ogni estrazione è composta da 20 numeri ( vedi lo spot di Bisio in tv :)

Il codice che sto per mostrarvi funziona abbastanza bene , però è lentissimoo
e vorrei col vostro aiuto velocizzarlo....
ecco il codice

DOPO AVER APERTO LA CONNESSIONE AL DB
rs.MoveFirst  
  For c = 1 To 89
   For v = c + 1 To 90 ' ricava tutti gli ambi su 90 numeri
   
            freq = 0
            rit = 0
            rit_max = 0
            rit_min = rs.RecordCount
            
            rs.MoveFirst
Do Until rs.EOF
 trovato = 0
      DoEvents
       For P = 1 To 19
       DoEvents
          For q = P + 1 To 20 ' ricavo gli ambi usciti  sull'estrazione
          DoEvents

          DoEvents
          comb(P) = rs("n" & P)
         comb(q) = rs("n" & q)

  n1 = c
  n2 = v ' ambi sui 90 numeri
  ' controllo se  sono presenti
If (comb(P) = n1 And comb(q) = n2) Or (comb(P) = n2 And comb(q) = n1) Then
                   dt = rs("Data")
                   id = rs("concorso")
                  freq = freq + 1
                  trovato = 1
                   DoEvents
            End If
            
          Next q
        Next P
 
'INIZIO CALCOLO DEL RITARDO STORICO
        If trovato = 0 Then
            rit = rit + 1
            If rit >= rit_max Then
                rit_max = rit
                data_max = rs("Data")
            ElseIf rit <= rit_min Then
                rit_min = rit
                data_min = rs("Data")
            End If
        Else
            rit = 0
        End If
'FINE CALCOLO DEL RITARDO STORICO

rs.MoveNext
Loop
'INSERISCO NELLA LISTA  I RISULTATI
       contlista = contlista + 1
       List3.AddItem contlista & "°" & " AMBO : " & n1 & " - " & n2 & " ---> " & "FQR: " & CStr(freq) & " - " & "RIT-ATT: " & CStr(rit) & " - " & "RIT-MAX: " & CStr(rit_max) & " - " & data_max '& " - " & " Assente dal " & " - " & " Posizione numeri : " & comb(P() & " - " & q
         Next v
  Next c

rs.Close
MsgBox "fine"
Ultima modifica effettuata da magicolotto 27/04/12 7:38
aaa
27/04/12 7:21
HeDo

ma c'è ancora qualcuno che cerca con la statistica di prevedere il risultato di un processo aleatorio? imbarazzante...
aaa
27/04/12 8:47
magicolotto
Si lo so è imbarazzante..
ma resta esclusivamente un gioco ed un passatempo
Spero comunque che qualcuno mi aiuti

aaa
27/04/12 9:02
nessuno
Non demordi ... era dai tempi di html.it che non ti vedevo ...

A parte quanto ti ha ricordato HeDo (che tante volte ti ho detto anch'io), non capisco

1) tutti quei DoEvents ...

2) perché

rit_min = rs.RecordCount

sia all'interno del ciclo


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/04/12 9:15
magicolotto
No, non demordo... :) che testa dura che sono :rotfl:
tutti quei DoEvents e che alcune volte in base alle prestazioni del pc, va in crash , per evitare la schermata bianca del form durante l'elaborazione..

rit_min = rs.RecordCount
intendi che sia all'interno del
Do Until rs.EOF

posso provare , ma non credo che cambi qualcosa nelle prestezioni..

grazie della risposta

aaa
27/04/12 9:33
nessuno
Postato originariamente da magicolotto:

tutti quei DoEvents e che alcune volte in base alle prestazioni del pc, va in crash , per evitare la schermata bianca del form durante l'elaborazione..


Ne basta uno, magari nel ciclo più interno ... gli altri eliminali ...

rit_min = rs.RecordCount


Se il numero rit_min lo ottieni una volta ed è sempre quello, perché calcolarlo centinaia di volte?

posso provare , ma non credo che cambi qualcosa nelle prestezioni..


E' "anche" quello ...

Ovviamente, il resto del codice andrebbe rivisto.

Una cosa fondamentale sarebbe utilizzare

array

in memoria e non controlli.

E anche cercare di capire se quello che chiedi non sia ottenibile direttamente con una query al DB.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/04/12 9:42
magicolotto
rit_min
lo posso anche eliminare , anche perchè in effetti è sempre = 1
a prescindere non mi serve

ok per doevents

per quanto riguarda il resto
array oppure direttamente una query al db
era appunto la mia domanda iniziale, su come dovrei fare ....

aaa
27/04/12 10:53
Ultimo

Gli Ambi sono 4005.......
If ok Then GOTO Avanza else GOTO Inizia