Foros del Web » Programación para mayores de 30 ;) » .NET »

Consulta de rendimiento

Estas en el tema de Consulta de rendimiento en el foro de .NET en Foros del Web. Estimados, tengo una aplicacion de escritorio en C# que trabaja con una base de datos access. en mi modelo tengo las siguientes funciones @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 29/04/2010, 10:51
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 17 años, 1 mes
Puntos: 16
Consulta de rendimiento

Estimados, tengo una aplicacion de escritorio en C# que trabaja con una base de datos access.

en mi modelo tengo las siguientes funciones

Código C#:
Ver original
  1. public bool grabarET2C(EscenarioEntity e,List<ET2CEntity> lista)
  2.         {
  3.             bool flagBorrado = ed.borrar(e);
  4.  
  5.             bool flag = false;
  6.  
  7.             for (int i = 0; i < lista.Count; i++)
  8.             {
  9.                 flag = ed.insertar(lista[i]);
  10.             }
  11.             return true;
  12.         }
  13.  
  14.  
  15.  
  16.         internal bool insertar(ET2CEntity o)
  17.         {
  18.             string sql = "insert into ET2C (id_modo,id_tipo,id_sub_tipo,id_tipo_escenario,id_escenario,id_ee,id_contaminante,id_magnitud,valor_et2c,fecha_et2c,id_region) values " +
  19.                          "('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}');";
  20.  
  21.             sql = string.Format(sql,o.Id_modo
  22.                                     , o.Id_tipo
  23.                                     , o.Id_sub_tipo
  24.                                     , o.Id_tipo_escenario
  25.                                     , o.Id_escenario
  26.                                     , o.Id_ee
  27.                                     , o.Id_contaminante
  28.                                     , o.Id_magnitud
  29.                                     , o.Valor_et2c.ToString()
  30.                                     ,o.Fecha_etc2
  31.                                     ,o.Id_region
  32.                                     );
  33.  
  34.             return executeNonSql(sql);
  35.         }
  36.  
  37.  
  38.         private bool executeNonSql(string sql)
  39.         {
  40.             using (DbCommand cmd = db.GetSqlStringCommand(sql))
  41.             {
  42.                 int r = (int)db.ExecuteNonQuery(cmd);
  43.                 return (r > 0);
  44.             }
  45.  
  46.         }


como veran, nada muy elaborado ni muy terrible.

ahora el problema es que en mi LISTA a insertar tengo 55 mil registros.
los que se estan demorando en insertar cerca de 20 minutos. :(

ahora bien, mi consulta en la siguiente.

¿como logro mejorar el tiempo en la insercion?
se puede responsabilizar solo al motor access que es muy basico para manejar tantos inserts?
o es algo que se puede arreglar mejorando el algoritmo de insercion?


de antemano muchas grcias!!!
  #2 (permalink)  
Antiguo 29/04/2010, 11:19
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 10 años, 5 meses
Puntos: 30
Respuesta: Consulta de rendimiento

Hola Muzzteing, bueno no podemos culpar solo a access. Pero de cuanto es el tamaño de tu bd access, hasta donde conozco no es recomendable un peso superior a los 2 gb. Digo recomendable porque conozco bd access gigantes, claro con muchos algoritmos de optimizacion.

Ahora, se me ocurre si lo que tienes es un listbox cargado y quieres guardar esos datos, podrias solo recorrer la lista e ir guardando y te ahorras 2 procedimientos

Código ASP:
Ver original
  1. #  For  i As Integer = 0 To Me.ListBox.Items.Count - 1 'recorro cada elemento del listbox
  2. #          codigo para guardar
  3. #   Next

Tambie, y por supuesto que el rendimiento mejoraria si utilizas un motor sql y stored procedures.

Saludos,
  #3 (permalink)  
Antiguo 29/04/2010, 13:11
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Consulta de rendimiento

gracias!
pero yo no estoy usando listbox :S
porque asumes eso?


alguna otra idea? :)

Etiquetas: rendimiento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:23.