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
App. WinForms / WPF .NET
Problema di performances con DB access
mercoledì 10 agosto 2005 - 20.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
sarto76
Profilo
| Junior Member
102
messaggi | Data Invio:
mer 10 ago 2005 - 20:39
Ciao a tutti vi spiego il mio problema.
Ho un programma che, dopo aver fatto diverse query su DB inserisce 150 record nel DB (è un questionario, guardo dove ci sono errori e li inserisco).
Prima avevo tutto su DB mysql, per fare tutte queste procedure ci metteva circa 2 secondi (utilizzavo mysql ODBC 3.51).
Ho trasportato tutto su DB access (utilizzo Microsoft.Jet.OLEDB.4.0) e ci mette circa 40 secondi.
è possibile che ci sia una differenza tanto marcata?
Se sì qualcuno saprebbe darmi un alternativa ad access? ce l'ho bisogno perchè voglio distribuire il mio programma, e non volevo che ognuno dovesse installarsi mysql apposta...
Grazie a tutti
sarto76
Profilo
| Junior Member
102
messaggi | Data Invio:
mer 10 ago 2005 - 20:53
Aggiungo il mio oggetto per le select che viene richiamato ogni volta:
public DataSet getDati(string query)
{
OleDbConnection myConnection = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\SLc&p\\Database\\SLc&p.mdb;");
OleDbCommand myCommand = new OleDbCommand(query,myConnection);
OleDbDataAdapter myDataAdapter=new OleDbDataAdapter();
myDataAdapter.SelectCommand=myCommand;
DataSet myDataSet= new DataSet();
myConnection.Open();
try
{
myDataSet.Clear();
myDataAdapter.Fill(myDataSet);
myConnection.Close();
}
finally
{
myConnection.Close();
}
return myDataSet;
}
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
gio 11 ago 2005 - 17:16
>Ho un programma che, dopo aver fatto diverse query su DB inserisce
>150 record nel DB (è un questionario, guardo dove ci sono errori
>e li inserisco).
>Prima avevo tutto su DB mysql, per fare tutte queste procedure
>ci metteva circa 2 secondi (utilizzavo mysql ODBC 3.51).
>Ho trasportato tutto su DB access (utilizzo Microsoft.Jet.OLEDB.4.0)
>e ci mette circa 40 secondi.
>è possibile che ci sia una differenza tanto marcata?
Bisognerebbe vedere la procedura per fare valutazioni in merito.
>qualcuno saprebbe darmi un alternativa ad access? ce l'ho
>bisogno perchè voglio distribuire il mio programma, e non volevo
> che ognuno dovesse installarsi mysql apposta...
Anche Access va installato (se non c'è) e, a differenza di MySql, la licenza ha un certo costo. In generale, qualunque motore di database tu scelga, occorrerà istallarlo sulla macchina target, a meno che non fai un'applicazione che sfrutta un meccanismo tutto custom, tipo leggere e scrivere da file XML... sempre se ne vale la pena.
Comunque, giusto la mia opinione.
Curioso di vedere la procedura, se possibile... -LV
(Peace X Love] = [1)
Amodio
Profilo
| Expert
525
messaggi | Data Invio:
ven 12 ago 2005 - 10:09
40 secondi è esagerato
rispondi a questo:
1) hai qualche indice nelle tabelle (gli indici rallentano gli insert e update)
2)che driver usi oledb o odbc (oledb è piu performante per access)
3) quante colonne susi per la insert( se si tratta di 100 o piu mi sa che è qui il problema,ed poi dipende anche dal tipo di dati, se usi un blob->note in access e ci metti un sacco di roba ...)
sarto76
Profilo
| Junior Member
102
messaggi | Data Invio:
lun 15 ago 2005 - 00:30
Provo ad inviare la procedure, ci sono alcuni commenti ma non so se sarà tutto chiaro.
Ci sono 50 domande con 3 possibili risposte, la procedura inserisce le 150 risposte dell'allievo e poi, controlla se sono giuste o sbagliate...
Per quanto riguarda le altre domande:
-non ho nessun indice
-utilizzo oleDB
- non inserisco campi con 150 colonne... al max una decina...
Altra domanda... o conferma... allora se qualcuno volesse utilizzare il mio programma dovrebbe avere MS access installato? non basterebbe un file per potersi connettere, tipo il Framework per DotNet??
Grazie mille per le risposte che mi avete dato
ciao Massimo
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
mar 16 ago 2005 - 19:39
> Provo ad inviare la procedure
Ho guardato la procedura ed effettivamente mi sembra che ci sia spazio per parecchio lavoro di normalizzazione e semplificazione, a partire dalla struttura del db fino ad arrivare alla procedura in questione.
Mentre cerchi un programmatore esperto in grado di ristrutturare il tutto*, puoi comunque provare a creare indici per tutte le varie chiavi e già dovresti avere un certo aumento di prestazioni.
> Altra domanda... o conferma... allora se qualcuno volesse utilizzare il mio programma dovrebbe avere MS access installato? non basterebbe un file per potersi connettere, tipo il Framework per DotNet??
Sì, in effetti basta il cosiddetto Runtime di Access. Puoi trovare info qui:
http://msdn.microsoft.com/library/en-us/modcore/html/deovrdeployingaccesssolutions.asp
Ciao. -LV
* Di questa "ristrutturazione" posso dirti che richiederebbe: 1) un minimo di analisi per risalire a cosa esattamente l'applicativo deve fare, 2) la ristrutturazione (semplificazione) del database, 3) la riscrittura (semplificazione) di tutte le query, 4) la semplificazione delle procedure. Nel complesso comunque non dovrebbe richiedere più di qualche giorno di lavoro, sempre se il sito non è enorme...
(Peace X Love] = [1)
sarto76
Profilo
| Junior Member
102
messaggi | Data Invio:
mar 16 ago 2005 - 22:19
grazie mille per le informazioni...
Il problema resta comunque... come mai con mysql questa procedura viene fatta in 5 secondi ed adesso ce ne mette 40? Ho provato ad inserire alcuni indici, come li avevo nel db mysql ma non cambia nienrte......
Grazie ciao
LudovicoVan
Profilo
| Junior Member
106
messaggi | Data Invio:
mar 16 ago 2005 - 23:20
>grazie mille per le informazioni...
>Il problema resta comunque... come mai con mysql questa procedura
>viene fatta in 5 secondi ed adesso ce ne mette 40? Ho provato
>ad inserire alcuni indici, come li avevo nel db mysql ma non
> cambia nienrte......
Per gli indici e su come ottimizzare purtroppo non so che dirti, non sono un esperto di Access.
Sul fatto che la procedura ci mette tanto di più, in effetti Access è in media un po' più lento di MySql (lo dicono i benchmark), ma anche se la differenza non è grandissima, la devi poi moltiplicare per tutti i loop e gli annidamenti che fai...
-LV
(Peace X Love] = [1)
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 !