Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di Melly
    Registrato dal
    Mar 2003
    Messaggi
    222

    [VB] Velocizzare i tempi di un ciclo

    salve a tutti avrei bisogno di un consiglio...

    il problema è questo....

    Ho una cartella con circa 80.000 file txt.
    ogni file ha semplicemente una riga che io devo suddividere e memorizzare in una tabella di access.
    ho scritto il codice e funziona tutto ma ho dei tempi che secondo la mole di dati con cui ho a che fare sono davvero troppo lunghi

    Esempio pratico per caricare 3300 file ci metto 7 minuti circa

    questo è il codice

    codice:
    Private Sub psbImportGriglie_Click()
    On Error GoTo GestioneErrore
    Dim NomeFileGriglie As String
    Dim Risposte As String
    Dim CodiceDomanda As String
    Dim Risposta As String
    Dim Punteggio As String
    Dim cnt As Integer
    Dim i As Integer
    Dim percorso As String
    Dim LunghezzaRisposte As Integer
    Dim ContatoreNumeroDomanda As Integer
    ContatoreNumeroDomanda = 1
    ' mi serve per dare un numero progressivo all'interno della tabella
    
    NomeFileGriglie = Dir(App.Path & "\Griglie\*.txt")
    Open App.Path & "\Griglie\" & NomeFileGriglie For Input As #1
        Line Input #1, Risposte
    Close #1
    
    LunghezzaRisposte = Len(Risposte)
    Do Until NomeFileGriglie = ""
        For i = 1 To LunghezzaRisposte - 2 Step 13
            CodiceDomanda = Mid(Risposte, i, 7) & Mid(Risposte, i + 8, 1)
            Risposta = UCase(Mid(Risposte, i + 7, 1))
            Punteggio = Replace(Mid(Risposte, i + 9, 4), ".", ",")
            GloUdt.StrSql = "INSERT INTO Griglia values('" & Mid
            (NomeFileGriglie, 1, 5) & "','" _
            & ContatoreNumeroDomanda & "','" & CodiceDomanda & "','" & 
             Risposta & "','" _
            & Punteggio & "',null,null)"
            Call CheckRcs(GloUdt.StrSql, GloUdt.Rcs)
            ContatoreNumeroDomanda = ContatoreNumeroDomanda + 1
            DoEvents
        Next
        Kill (App.Path & "\Griglie\" & NomeFileGriglie)
        DoEvents
        NomeFileGriglie = Dir
        Open App.Path & "\Griglie\" & NomeFileGriglie For Input As #1
            Line Input #1, Risposte
        Close #1
    
        ContatoreNumeroDomanda = 1
        cnt = cnt + 1
        lblCnt.Caption = cnt
    Loop
    
    MsgBox "OK"
    Exit Sub
    GestioneErrore:
    Call GestioneErrori
    End Sub
    Aiutami a ritrovare l’interesse per le piccole cose che sono alla base di tutte le promesse del futuro che cresce, perché sono le sfumature a dare vita ai colori e a farci tornare in mente le cose più pure dei giorni migliori

  2. #2
    prova a memorizzare le righe di tutti i file in un array
    poi scorri l'array e scrivi sul db
    prude il dito, lui sdraiato
    ha giocato a guardie e ladri col ladro sbagliato

  3. #3
    i file aprili in binario ci mette decisamente meno
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  4. #4
    1 - Togli i DoEvents
    2 - Sostituisci tutte le funz che ritornano testo con le versioni con la $ (mid -> mid$ ; replace->replace$, ecc...)
    3 - Come dice xegallo apri in binary

    Volendo puoi ottimizzare molto l'SQL (alemno, con SQLServer funzionerebbe, con access non so...) xò diventa un po + complicato.... fammi sapere se hai ancora bisogno


  5. #5
    Utente di HTML.it L'avatar di Melly
    Registrato dal
    Mar 2003
    Messaggi
    222
    ho provato con l'arrey bidimensionale ma le dimensioni che prende diventano ingestibili....

    ho aperto i file in binario e sostituito le mid con mid$ ma purtroppo ho guadagnato solo pochi files al minuti (3 o 4)

    se tolgo i doevents va decisamente più lento


    aiutatemi.... non posso metterci due ore solo per caricare 80000 files
    Aiutami a ritrovare l’interesse per le piccole cose che sono alla base di tutte le promesse del futuro che cresce, perché sono le sfumature a dare vita ai colori e a farci tornare in mente le cose più pure dei giorni migliori

  6. #6
    allora...

    Se togli Doevents non è + lento, solo che perdi il controllo e magari hai l'impressione che si sia piantato ma alla fine dovresti guadagnare qualcosa.

    Secondo me la cosa migliore che puoi fare è lavorare sull'sql.

    Invece che eseguire un istruzione per ogni ciclo puoi fare una stringa che contenga TOT istruzioni (ad es. 100) ed eseguire quella stringa. In pratica eseegui le istruzioni SQL molto meno spesso.
    Attenzione però!!!
    Visual Basic è lentissimo a gestire le stringhe (almeno nel modo classico), quindi rischi di impiegare + tempo ad allocare le stringhe che a eseguire l'SQL...
    Se ti succede dimmi qualcosa che ti posto un po di codice x risolvere il prob...

    ciao

  7. #7
    Utente di HTML.it L'avatar di Melly
    Registrato dal
    Mar 2003
    Messaggi
    222
    Originariamente inviato da riky78
    allora...

    Se togli Doevents non è + lento, solo che perdi il controllo e magari hai l'impressione che si sia piantato ma alla fine dovresti guadagnare qualcosa.

    Secondo me la cosa migliore che puoi fare è lavorare sull'sql.

    Invece che eseguire un istruzione per ogni ciclo puoi fare una stringa che contenga TOT istruzioni (ad es. 100) ed eseguire quella stringa. In pratica eseegui le istruzioni SQL molto meno spesso.
    Attenzione però!!!
    Visual Basic è lentissimo a gestire le stringhe (almeno nel modo classico), quindi rischi di impiegare + tempo ad allocare le stringhe che a eseguire l'SQL...
    Se ti succede dimmi qualcosa che ti posto un po di codice x risolvere il prob...

    ciao
    ora provo e ti dico grazie
    Aiutami a ritrovare l’interesse per le piccole cose che sono alla base di tutte le promesse del futuro che cresce, perché sono le sfumature a dare vita ai colori e a farci tornare in mente le cose più pure dei giorni migliori

  8. #8
    Utente di HTML.it L'avatar di Melly
    Registrato dal
    Mar 2003
    Messaggi
    222
    Originariamente inviato da riky78
    1 - Togli i DoEvents
    2 - Sostituisci tutte le funz che ritornano testo con le versioni con la $ (mid -> mid$ ; replace->replace$, ecc...)
    3 - Come dice xegallo apri in binary

    Volendo puoi ottimizzare molto l'SQL (alemno, con SQLServer funzionerebbe, con access non so...) xò diventa un po + complicato.... fammi sapere se hai ancora bisogno

    ho fatto un test e sembra che il $ rallenti...

    proprio non capisco :master:
    Aiutami a ritrovare l’interesse per le piccole cose che sono alla base di tutte le promesse del futuro che cresce, perché sono le sfumature a dare vita ai colori e a farci tornare in mente le cose più pure dei giorni migliori

  9. #9
    Utente di HTML.it L'avatar di Melly
    Registrato dal
    Mar 2003
    Messaggi
    222
    ho provato ad ottimizzare con l'sql passandogli come mi avevi detto qualcosa del tipo
    codice:
    StringaSql= INSERT INTO Griglia values('00001','76','AA003721','A','0,27',null,null) 
    INSERT INTO Griglia values('00001','77','AA003331','A','0,27',null,null) 
    INSERT INTO Griglia values('00001','78','AA003171','B','0,27',null,null)
    cnn.execute StringaSql
    ma access non sembra gradire

    Aiutami a ritrovare l’interesse per le piccole cose che sono alla base di tutte le promesse del futuro che cresce, perché sono le sfumature a dare vita ai colori e a farci tornare in mente le cose più pure dei giorni migliori

  10. #10
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387
    codice:
    StringaSql= "INSERT INTO Griglia values('00001','76','AA003721','A','0,27',null,null) "
    cnn.execute StringaSql
    StringaSql= "INSERT INTO Griglia values('00001','77','AA003331','A','0,27',null,null)"
    cnn.execute StringaSql
    StringaSql= "INSERT INTO Griglia values('00001','78','AA003171','B','0,27',null,null)"
    cnn.execute StringaSql
    ...forse cosi' gradisce di piu'
    ...and I miss you...like the deserts miss the rain...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.