none
Ayuda con esta duda C# y Mysql RRS feed

  • Pregunta

  • Buenas tardes antes que nada gracias por la ayuda. tratare de ser lo mas claro posible para exponer mis dudas y me pueda ayudar.

    Estoy creando una aplicación y todo funciona bien, esta esta aplicación esta echa en windows form y interatua con una base de datos que esta alojada en un servidor en linea, he notado que mi aplicación es fluida hasta cuando hago peticiones a la base de datos.

    Al notar eso intente por todos los medios reducir ese lageo que se generaba, optimice las consultas de mysql hasta el punto de hacer procedimientos almacenados dentro del motor de mysql.

    Considerablemente mejoro pero aun así queda un estancamiento de 1 a 6 segundos cuando consulto o agrego actualizo o modifico la aplicación se queda pegada.

    Implemente los thread en algunas consultas pero se supone que mi aplicación no debería de quedare congelada

    Ejemplo

    Consulta Mysql Procedimiento almacenado

    DELIMITER // 
    create procedure Mostrar_Lista_De_Clientes_SE () BEGIN select  INDICE,CLIENTE from NUEVA_ORDEN group by CLIENTE;
    end //
    DELIMITER ;

    en C#

     //HILO MOSTRAR CLIENTES 1
            public void Hilo_Mostrar_Listado_De_Clientes1()
            {
                try
                {
                    Invoke(new Action(() =>
                    {
                        MySqlCommand comando = new MySqlCommand(string.Format("Mostrar_Lista_De_Clientes_SE"),                                            ClassBdComun.ObtenerConexion());
                        comando.CommandType = CommandType.StoredProcedure;
                        MySqlDataAdapter datos = new MySqlDataAdapter(comando);
                        DataSet ds = new DataSet();

                        datos.Fill(ds);
                        DataGridViewTodasLasOrdenesCerradas.DataSource = ds.Tables[0];
                        DataGridViewTodasLasOrdenesCerradas.Columns["INDICE"].Visible = false;// oculta la columna indice

               
                    }));
                }
                catch (Exception)
                {
                    MessageBox.Show("SE PERDIO LA COMUNICACION CON EL SERVIDOR, VERIFICAR SU CONEXION A INTERNET");
                }

            }

      //BOTON MOSTRAR LISTADO DE CLIENTES
            private void ButtonMostrarCliente_Click(object sender, EventArgs e)
            {
                Thread T1 = new Thread(Hilo_Mostrar_Listado_De_Clientes1);
                T1.Start();
               
            }

    /**/---------------------------------------------------------------------------------

    Me gustaría que me pudieran dar un ejemplo sencillo de Ansy await pero muy sencillo y posteriormente como podría implementar el código de arriba en un Ansy await y que consejos me pueden dar para que mi aplicacion sea fluida cuando consulto la base de datos, por cierto la base de datos no es local esta en en linea.

    sobre ansy y await no entiendo mucho me gustaría que me muestren un ejemplo y otro donde pueda implementar el codigo de arriba

    gracias por apoyo


    Juega Contra El Mejor Muere Como Los Demas

    domingo, 10 de mayo de 2020 16:05

Todas las respuestas

  • Aprovechando tengo una duda mas hay dos datepicker que comparo

       if (  DateTimePickerConsultaFechaFinal.Value < DatePickerFechaDeSolicitud.Value)
                {
                    LabelConsultaFechaDeTermino.ForeColor = Color.DarkOrange;
                    MessageBox.Show("LA FECHA DE CIERRE DEL SERVICIO ES ANTERIOR A LA FECHA DE SOLICITUD DEL SERVICIO, O NO A REGISTRADO UNA FECHA DE CIERRE FAVOR DE VERIFICAR", "NOTIFICACION", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

    pero cuando los 2 datepicker tienen la msima fecha me lo toma como si la feha del DateTimePickerConsultaFechaFinal.Value < DatePickerFechaDeSolicitud.Value pero si tienen la misma fecha no deberia marcarmelo asi o que estoy haciendo mal me podrian ayudar


    Juega Contra El Mejor Muere Como Los Demas

    domingo, 10 de mayo de 2020 16:16
  • Deleted
    domingo, 10 de mayo de 2020 17:07
  • Implemente los thread en algunas consultas pero se supone que mi aplicación no debería de quedare congelada [...]

    Invoke(new Action(() => ...

    No es de extrañar que la aplicación se quede congelada. Tienes mal hecha la implementación del Thread.

    Es cierto que construyes un thread... pero luego en el Thread lo primero que haces es llamar a Invoke y dentro del Invoke meter todo el proceso que accede a la base de datos. De esta manera, el Thread no vale para nada, porque lo que hace el Invoke es salir del Thread y devolver la ejecución al hilo principal, que precisamente era el que no querías congelar.

    La forma de usar el Thread es primero ejecutar en el thread (¡antes de llamar al Invoke!) todo el código que llama a la base de datos, y dejar los resultados en una variable, como por ejemplo un DataTable. Y una vez que eso ya ha terminado, entonces llamas al Invoke y dentro metes el código que traslada esa variable a la pantalla.

    try
    {
        MySqlCommand comando = new MySqlCommand(string.Format("Mostrar_Lista_De_Clientes_SE"),                                           ClassBdComun.ObtenerConexion());
        comando.CommandType = CommandType.StoredProcedure;
        MySqlDataAdapter datos = new MySqlDataAdapter(comando);
        DataSet ds = new DataSet();
        datos.Fill(ds);
    
        this.Invoke(new Action(() =>
        {
            DataGridViewTodasLasOrdenesCerradas.DataSource = ds.Tables[0];
            DataGridViewTodasLasOrdenesCerradas.Columns["INDICE"].Visible = false;// oculta la columna indice
        }));
    }

    domingo, 10 de mayo de 2020 17:20
    Moderador
  • Gracias por responder, voy intentar lo plateado  y te comento los resultados.

    Juega Contra El Mejor Muere Como Los Demas

    lunes, 11 de mayo de 2020 0:47
  • Muchas gracias voy a corregir y modificar te comento los resultados a ver que pasa.

    Juega Contra El Mejor Muere Como Los Demas

    lunes, 11 de mayo de 2020 0:48
  • Honestamente no soy muy bueno programando de echo creo que soy un noob lamer, pero estuve investigando y aparte de que tenga mi programación bien  hay factores alternos que retrasan las consultas mysql.

    estuve leyendo y por ejemplo el servidor que yo tengo es en Neubox, y por lo que investige el servidor es compartido y no es un servidor dedicado eso da incapie que los recursos del hardware del servidor sean utilizados por demás personas y eso afecta indirectamente en el desempeño de mi aplicación, no lo tomo como verdad obluta pero es lo que llegue a entender  con lo que investigue.

    Según recomiendan rentar un servidor dedicado para tus aplicaciones donde nada mas tu puedas ocupar todo el hardware del servidor optimizando los recursos a tu favor. 

    si estoy en lo incorrecto me gustaría que me pudieran asesorar.


    Juega Contra El Mejor Muere Como Los Demas

    lunes, 11 de mayo de 2020 0:54
  • Hola

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las respuestas proporcionadas?  

     

    Gracias por usar los foros de MSDN. 

      

    Oscar Navarro

    martes, 12 de mayo de 2020 16:32
    Moderador