Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Lentezza ado.net 2.0
martedì 17 giugno 2008 - 16.35
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
alessio1783
Profilo
| Newbie
4
messaggi | Data Invio:
mar 17 giu 2008 - 16:35
Salve, non so se è la sezione giusta del forum, io cmq ci provo:
Ho il seguente problema:
Ho notato una lentezza mostruosa di ado net, in special modo nei metodi fill e update dei data adapter (siano essi sqldataadapter o tableadapter).
Ho fatto una prova con Vb6 e il vecchio DAO e vb2005 e ado net 2.0, nella quali vado a inserire 100000 record in una sola tabella con un solo campo.
Il risultato è che Vb6 è istantaneo, mentre vb2005 ci mette 2 minuti. Come mai questa lentezza? lo so che 100000 record sono tanti da gestire, ma a volte capita di doverli caricare tutti nel data set. Come posso fare per velocizzare queste operazioni?
Posto il codice di VB2005 che ho usato:
----------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Label1.Text = Now
Dim ds As New dbprovaDataSet
Dim tab As dbprovaDataSet.tabella1DataTable = ds.tabella1
Dim riga As dbprovaDataSet.tabella1Row
Dim i As Integer = 0
For i = 1 To 100000
riga = tab.Newtabella1Row
riga.campo = i
tab.Addtabella1Row(riga)
Next
Me.Label2.Text = Now
adap.Update(tab)
Me.Label3.Text = Now
MsgBox("fine")
End Sub
---------------------------
Grazie per le eventuali risposte.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 17 giu 2008 - 16:56
>Ho fatto una prova con Vb6 e il vecchio DAO e vb2005 e ado net
>2.0, nella quali vado a inserire 100000 record in una sola tabella
>con un solo campo.
>Il risultato è che Vb6 è istantaneo, mentre vb2005 ci mette 2
>minuti. Come mai questa lentezza?
Ciao Alessio,
Per eseguire inserimenti massivi in modo efficiente, puoi affidarti alla classe SQLBulkCopy presente nel Framework .NET 2.0.
Questo articolo confronta il classico approccio "row-by-row" con un inserimento BULK:
http://www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-server
>Grazie per le eventuali risposte.
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
alessio1783
Profilo
| Newbie
4
messaggi | Data Invio:
mar 17 giu 2008 - 18:10
il mio era solo un test e ado mi è sembrata + lenta. Apparte quella soluzione, secondo te per trattare moli molto grandi di dati che cosa conviene usare? dataset tipizzati? non tipizzati? altro?
grazie mille...
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 17 giu 2008 - 18:24
>il mio era solo un test e ado mi è sembrata + lenta. Apparte
>quella soluzione, secondo te per trattare moli molto grandi di
>dati che cosa conviene usare? dataset tipizzati? non tipizzati?
>altro?
Operazioni Bulk Logged (BCP, BULK INSERT, "quella soluzione"). Punto
>grazie mille...
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
alessio1783
Profilo
| Newbie
4
messaggi | Data Invio:
mar 17 giu 2008 - 18:29
Operazioni Bulk Logged (BCP, BULK INSERT, "quella soluzione"). Punto ovvero?
Da quello che ho capito una operazione bulk è diciamo come un batch che legge da una parte e scrive dall'altra.
Ma se io devo farci operazio sui dati? tipo copiare solo una certa parte di dati da una tabella all'altra? oppure copiarli ma modificando qualche campo?...ad esempio metti che io debba copiara tutti i record da A a B a messo che il campo "bloccato" sia su false. Tu come faresti con un'operazione bulk? scusa se sono un po duro di comprendonio...Ti ringrazio ancora.
Ciao.
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 18 giu 2008 - 10:14
>Da quello che ho capito una operazione bulk è diciamo come un
>batch che legge da una parte e scrive dall'altra.
>Ma se io devo farci operazio sui dati? tipo copiare solo una
>certa parte di dati da una tabella all'altra? oppure copiarli
>ma modificando qualche campo?...ad esempio metti che io debba
>copiara tutti i record da A a B a messo che il campo "bloccato"
>sia su false. Tu come faresti con un'operazione bulk?
Non puoi applicare dei filtri durante una operazione bulk.
Una soluzione che generalmente si adotta è quella di caricare i dati in modalità bulk in una tabella di staging, applicando a quest'ultima tutte le logiche necessarie al popolamento delle tabelle di destinazione.
>scusa se sono un po duro di comprendonio...Ti ringrazio ancora.
Ma figurati
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
alessio1783
Profilo
| Newbie
4
messaggi | Data Invio:
mer 18 giu 2008 - 12:34
Sinceramente non vedo il vantaggio...forse allora mi conviene usare insertinto....
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mer 18 giu 2008 - 13:45
>Sinceramente non vedo il vantaggio...forse allora mi conviene
>usare insertinto....
Il vantaggio è che le operazioni Bulk sono minimamente loggate e risultano n ordini di grandezza più efficienti rispetto ad una normale operazione DML loggata.
Quindi, importi tutti i dati in modalità bulk in una tabella di appoggio, elabori i dati come credi ed importi il risultato nelle tabelle di destinazione.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !