Poblema prestazioni

martedì 21 novembre 2006 - 10.07

a.cincischio Profilo | Newbie

Salve ragazzi, un piccolo problema.
Sto impattando e cercando di risolvere alcuni problemi di prestazioni inerenti c# e oracle e mi viene un dubbio.
Secondo voi qual'è il miglior comando (esclusivamente da un punto di vista prestazionale) per recuperare dei valori da un database ed inserirli in un datatable c#?

Io utilizzo questi comandi :

// apro il command
OracleCommand myCommand = new OracleCommand("Select * from pippo", myConn);

// eseguo la query
OracleDataReader myRead = myCommand.ExecuteReader(CommandBehavior.SingleResult);

DataTable MyTable = new DataTable();
MyTable.Load(myRead);

La query punta ad una sola tabella e restituisce sempre una batteria corposa di risultati.
Secondo voi sto facendo bene o c'è di meglio?

Grazie,

Alessio

Djdee86 Profilo | Newbie

Potresti provare a prendere dalla tabella solo una parte dei record (con una limit o qualcosa del genere ......) e poi dare la possibilità all'utente di andare in ricerca.......
Diego Degli Esposti

a.cincischio Profilo | Newbie

un limite già c'è, in quanto nella where viene effettuato un between fra due date.
Non uso "*" ma i campi che mi interessano.
Utilizzo un datatable proprio per evitare di dover interrogare più volte la tabella ad ogni giro.
COn il datatable almeno riesco a fare delle select utilizzando la memoria che sono mille volte più veloci.

Ale.

Djdee86 Profilo | Newbie

Io per riempire un datatable uso ....

Friend Function OpenDataTable(ByVal Strsql As String, ByRef dtable As DataTable) As Boolean
Dim Adapter As New OdbcDataAdapter(Strsql, conn)
Adapter.Fill(dtable)
If dtable.Rows.Count <> 0 Then
Return True
Else
Return False
End If
end function

con sqlServer 2000 e non ho grandi problemi di prestazioni........magari prova anche tu
ad usare un dataadapter al posto di un datareader.....
Diego Degli Esposti

a.cincischio Profilo | Newbie

Uso il metodo select in un paio di punti ma non ho risultati di performance disastrosi anzi.
Il problema purtroppo sembra stare a monte, ossia sul database (ci stanno lavorando i sistemisti) ed esce dalle mie competenze.
Nel mio piccolo non posso fare altro che ottimizzare il più possibile c#.
proverò anche la soluzione dataadapter.

Ale.

a.cincischio Profilo | Newbie

Ma se ho una tabella da 800.000 record circa da interrogare 4 volte in un ciclo, non sarebbe meglio caricarla in memoria?
Il problema è che mi va in timeout se provo a metterla in un datatable ed il rischio è di fare un lavoro inutile.

Che dite, meglio fare 4 select (con il conseguente rallentamento) oppure trovare una strada diversa?

Ale.
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5