Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Task e transazioni

  1. #1
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,250

    Task e transazioni

    Ho un dubbio.
    Ho questa situazione:
    Devo inserire in una tabella 1000 record, non posso utilizzare bulkinsert, storedprocedure o altro.

    Banalmente ho una funzione che chiamiano Inserisci(ListaDati) che apre una transazione, lancia 1000 volte una query di insert e poi fa commit.

    Inserisci ci mette esattamente 5 secondi.
    Se invece richiamo la la funzione da un task ci mette esattamente la metà del tempo. PERCHE'???
    codice:
    Dim wListTask As New List(Of Task)
    Dim wlastTask = Task.Factory.StartNew(Sub() Inserisci(ListaDati) )
    wListTask.Add(wlastTask)
    Task.WaitAll(wListTask.ToArray())
    Se metto più task paralleli a fare insert i tempi rallentano (ma penso sia perchè non inserisco più in ordine i record).

    La domanda è quindi perchè un task sta velocizzando le insert?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Il metodo Inserisci come è implementato? (anche a grandi linee)
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,250
    + o - così

    Ho tolto alcune parti.
    xQD è un oggetto che normalemnte uso per creare le connessioni in base alla configurazione.
    In questo caso ne utilizzo delle parti (ma non dovrebbe essere quello il problema.).

    codice:
                Dim wDataCommand = xQD.Command
                wConnection = New OleDb.OleDbConnection(xQD.ConnectionString)
    
    
                Using wConnection
                    wConnection.Open()
                    wTransaction = wConnection.BeginTransaction()
    
    
                    Try
                        wDataCommand.Connection = wConnection
                        wDataCommand.Transaction = wTransaction
    
    
                        For Each Record In Input.RecordsC
    
    
                            ''modifico i parametri                        
    
    
                            wDataCommand.ExecuteNonQuery()
                            wProgressivo += 1
                        Next
    
    
                    Catch ex As Exception
                        wTransaction.Rollback()
                        Throw
                    End Try
                End Using

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.