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

Acelerar Codigo

Estas en el tema de Acelerar Codigo en el foro de .NET en Foros del Web. Hola mi codigo se demora 3-4 min en ejecutarse lo cual es demasiado, supongo yo no se optimizarlo, ojala alguien me pueda dar algunos tips ...
  #1 (permalink)  
Antiguo 23/11/2010, 19:13
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 17 años, 10 meses
Puntos: 4
Acelerar Codigo

Hola mi codigo se demora 3-4 min en ejecutarse lo cual es demasiado, supongo yo no se optimizarlo, ojala alguien me pueda dar algunos tips respecto al codigo solamente, la BD es SQL SERVER COMPACT 3.5 las tablas ya tienen indices.

Código:
 Dim sql As String = "SELECT RECIPE_FOOD.NDB_No_Food, RECIPE_FOOD.Nutr_Val FROM RECIPE_FOOD WHERE RECIPE_FOOD.NDB_No_Recipe = " & CodigoReceta
        Dim cmd As SqlCeCommand = New SqlCeCommand(sql, conexionSql)
        cmd.CommandType = CommandType.Text 'tipo comando text = sentencia sql

 Try

            Dim rs As SqlCeResultSet = cmd.ExecuteResultSet(ResultSetOptions.Scrollable)

            If rs.HasRows Then

                Do While rs.Read()


                    'POR CADA INGREDIENTE
                    Dim CodigoIngrediente As String = rs.GetOrdinal("NDB_No_Food")
                    Dim CanIngrediente As Decimal = rs.GetOrdinal("Nutr_Val")

                    'Codigo y cantidad del ingrediente
                    CodigoIngrediente = rs.GetString(CodigoIngrediente)
                    CanIngrediente = rs.GetDecimal(CanIngrediente)

                    Dim GramosIngrediente As Decimal = (CanIngrediente * 100) / CanTotalIngrediente

                  
                    Dim sql2 As String = "SELECT Nutr_No, Units, NutrDesc, SR_Order FROM NUTR_DEF"
                    Dim cmd2 As SqlCeCommand = New SqlCeCommand(sql2, conexionSql)
                    cmd2.CommandType = CommandType.Text 'tipo comando text = sentencia sql

                    Dim rs2 As SqlCeResultSet = cmd2.ExecuteResultSet(ResultSetOptions.Scrollable)

                    If rs2.HasRows Then

                        Do While rs2.Read()

                            Dim Nutr_No As String = rs2.GetOrdinal("Nutr_No")
                            Dim Units As String = rs2.GetOrdinal("Units")
                            Dim NutrDesc As String = rs2.GetOrdinal("NutrDesc")
                            Dim SR_Order As String = rs2.GetOrdinal("SR_Order")

                            'datos del nutriente
                            Nutr_No = rs2.GetString(Nutr_No)
                            Units = rs2.GetString(Units)
                            NutrDesc = rs2.GetString(NutrDesc)
                            SR_Order = rs2.GetFloat(SR_Order)

                            Energia = (mIngredientes.InformacionNutriente(CodigoIngrediente, Nutr_No) * GramosIngrediente) / 100
                            EnergiaTotal = EnergiaTotal + Energia
                           

                        Loop

                    End If

                    rs2.Close()




                Loop


            End If

            MessageBox.Show(x)

        Catch sqlexception As SqlCeException

            MessageBox.Show(sqlexception.Message, "Error:", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Catch ex As Exception

            MessageBox.Show(ex.Message, "Error:", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Finally

            mSqlServerCe.Desconectar()

        End Try
Gracias por cualquier sugerencia.
__________________
Ingeniero (E) en Computación e Informática
The last man alone with god.
  #2 (permalink)  
Antiguo 25/11/2010, 14:41
Avatar de devilinside  
Fecha de Ingreso: marzo-2008
Ubicación: En Perú
Mensajes: 73
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Acelerar Codigo

Debes hacer todas esas operaciones en un procedimiento almacenado, de ese modo evitas tantas idas y vueltas del servidor. Una sola llamada que obtenga el resultado de toda la operación (resultado con todos los valores calculados en una misma lista).

Saludos.
  #3 (permalink)  
Antiguo 25/11/2010, 15:33
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 17 años, 10 meses
Puntos: 4
Respuesta: Acelerar Codigo

Hmm esta difícil no me puedo imaginar como podría ser ya que cada valor depende del resultado la operación anterior (tb obtenido de una llamada a BD)

Vere que se me ocurre, gracias.
__________________
Ingeniero (E) en Computación e Informática
The last man alone with god.
  #4 (permalink)  
Antiguo 26/11/2010, 11:01
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Respuesta: Acelerar Codigo

algo para optimizar podria ser sacar

Dim sql2 As String = "SELECT Nutr_No, Units, NutrDesc, SR_Order FROM NUTR_DEF"
Dim cmd2 As SqlCeCommand = New SqlCeCommand(sql2, conexionSql)
cmd2.CommandType = CommandType.Text 'tipo comando text = sentencia sql

del ciclo mas grande ya q como tiene filtros ese select solo requieres los datos 1 vez y puedes mantener esa informacion tal vez en memoria si no es demasiada habria que considerar ese punto.

como dicen un stored procedure puede ser una opcion viable, pero el hecho de requerir valores previamente calculados implica tal vez el uso de alguna tecnica como la programacion dinamica para solventar el algoritmo.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Etiquetas: acelerar
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 08:21.