2012-01-04 35 views
5

Tengo una tabla con la clave principal en MS SQL 2005, que tiene unos cientos de miles de registros. Cuando lo consulto en Management Studio para un registro, lo hago de forma muy rápida, pero cuando uso el código a continuación para encontrarlo, demora varios segundos. Es imprescindible para mí usar el conjunto de datos, ya que necesito actualizar la fila. ¿Cómo puedo mejorar el rendimiento?SqlDataAdapter.Fill es demasiado lento, incluso para un registro

objData . ProcName ="myProcName" 
objData . CreateCommand() 
objData . Parameters("@BName", SqlDbType. VarChar, 20, "MyBranch1") 
SqlDataAdapter da = objData . createAdapter() 
da . Fill(ds,"MyTable1") 

Mientras que el código proc es muy simple:

select * from MyTable1 Where BranchName = @BName 

este conjunto de datos es a tener 5 mesas abierto de la misma manera por lo que el tiempo total es de más de un minuto

+1

Datareader es definitivamente el camino a seguir: http://msdn.microsoft.com/en-us/library/haa3afyz%28v=VS.100%29.aspx – broke

+0

Aquí está el código de ejemplo – Adeem

Respuesta

2

Debe considerar el uso datareader en lugar de conjunto de datos y hacer una actualización manual utilizando sqlcommand.

T debe también considerar restringir el número de registros que están alcanzando mediante posiblemente suministran criterios adicionales

+0

¿Entonces está diciendo que no es posible tener un mejor rendimiento con el conjunto de datos? Y estoy usando suficientes criterios ya que cada una de las 5 tablas de datos en el conjunto de datos no contiene más de 5 filas – Adeem

+0

cuando usas datareader, mueve un registro a la vez mientras que en el datasepter y el dataset, el adaptador simplemente recupera todos los registros y crea objetos de datarow para ello (y también para las restricciones y las relaciones, dependiendo de si su conjunto de datos está tipeado) esta creación de objetos lleva más tiempo, lo que es directamente proporcional al número de registros que tiene. ¿Es eso una aplicación web o una aplicación de Windows? Es posible que pueda decirle el enfoque exacto que debe tomar dependiendo de en qué esté trabajando. –

+0

Esta es la aplicación web y deseaba mejorar el rendimiento sin cambiar mucho el código. Pero si no es posible, lo cambiaré al lector de datos. Tiene razón sobre el objeto DataRow, etc. ¿Podemos establecer algún atributo o algo para ignorar la restricción y las cosas de relación en el conjunto de datos? – Adeem

1

he visto el comportamiento de retardo muy similar utilizando un SQLDataAdapter, que tuvo muchos segundos para devolver una respuesta, frente a correr la misma exacta procedimiento en SQL Server Mgmt Studio (en la misma máquina cliente), que devolvió una respuesta al instante.

Reconstruí los índices en las tablas afectadas y la respuesta de SQLDataAdapter fue instantánea.

Nunca he visto este comportamiento de retraso con un SQLDataReader. A menudo uso SQLDataReader y simplemente hago MyTable.Load (MySQLDataReader). Parece tener menos sobrecarga que SQLDataAdapter.

Cuestiones relacionadas