Implementar IDisposable correctamente ðŸšŪ - Con ejemplos

āđāļŠāļĢāđŒ
āļāļąāļ‡
  • āđ€āļœāļĒāđāļžāļĢāđˆāđ€āļĄāļ·āđˆāļ­ 20 āļ.āļĒ. 2024

āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™ • 40

  • @NetMentor
    @NetMentor  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +4

    Blog: www.netmentor.es/Entrada/implementar-idisposable
    Tiwtter: twitter.com/NetMentorTW

  • @ManuelRBercian
    @ManuelRBercian 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Belleza de Video, siempre quise saber eso y te soy sincero nunca profundice en el tema y siempre tuve el problema, buenísimas todas las recomendaciones que das y te agradezco la dedicaciÃģn. Sigue Adelante! Saludos desde Guatemala.

  • @giorgiocipriano3334
    @giorgiocipriano3334 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Video muy claro y ejemplos perfectos, gracias y felicitaciones.

  • @carlosgrover9967
    @carlosgrover9967 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Grandioso video, muchas gracias y saludos desde MÃĐxico

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Gracias!

  • @TioCachasDeOro
    @TioCachasDeOro 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Excelente video, hacer mas con los recursos minimos necesarios y así ahorrar recursos. Muchas gracias

  • @2005bgva
    @2005bgva 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    muchas gracias, muy interesante.

  • @arielcattaneo
    @arielcattaneo 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Genial NetMentor !
    Esta bien des referenciar los handler a eventos que se hallan asignados en la implementaciÃģn del Dispose().
    Dispose() {
    myEvent -= HandlerMethod
    }

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      no se si es una pregunta o una afirmaciÃģn, pero sí, si tienes eventos debes des-referenciarlos en el dispose (o antes en un metodo propio) 👍

    • @arielcattaneo
      @arielcattaneo 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@NetMentor Se me olvido el "?". Entonces esta bien y no tengo que cambiar mi habito. Gracias, saludos !

  • @kervytmarrerorosales535
    @kervytmarrerorosales535 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    âĪïļ gracias!

  • @Mirandayomar
    @Mirandayomar 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Muy buen video

    • @NetMentor
      @NetMentor  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Gracias !

  • @javiopakan2
    @javiopakan2 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Saludos, gracias por tus video y esfuerzos.... una curiosidad, he visto a otros que han dicho que sin implementar el IDipose en la clase, solo con el hecho de usar usin (....){..}.. aseguramos que llamara el IDipose

    • @NetMentor
      @NetMentor  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      Sí, con using(){} llamamos al dispose cuando se cierra el using, el problema es que si no implementamos el mÃĐtodo no hay metodo al que llamar.
      este ejemplo lo puedes ver en el vídeo en el minuto 8:00 nuestro wrapper contiene el tipo MySqlConnection el cual si tiene dispose, entonces, para este ejemplo podríamos hacer using(MySqlConnection){ select *... } en vez de new mysqlconnection y llamaría al dispose de mysqlconnection, con lo que el resutlado seria el mismo.
      Pero en el mundo real (que es lo que mis ejemplos siempre intentan simular), no insertamos en todas las tablas en el mismo mÃĐtodo (o no deberíamos) sino que debemos crear una transacciÃģn. ir insertando en cada una de las tablas y cuando terminamos hacemos el commit junto con el dispose, ya que así reutilizamos la misma conexiÃģn en todos los inserts, ademÃĄs de que si falla, no hay que elminar informaciÃģn ya insertada.
      un saludo.

    • @javiopakan2
      @javiopakan2 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      @@NetMentor gracias!!! En algÚn momento me gustaría que subas un vídeo implementando el patrÃģn repositorio y UoW... Así como haces en el mundo real el ejemplo.... Gracias por todo

    • @NetMentor
      @NetMentor  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Pues posiblemente lo suba, eso sí, no se.cuando, tengo una larga lista de pendientes primero 😂

  • @juliofrias3984
    @juliofrias3984 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Windows Form: View -> creo objeto -> SuplidorController -> creo objeto -> SuplidorDTO & SuplidorDTA, mi pregunta: Debo implementar la Interfaz IDisposable en las tres clases???

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Hola a que te refieres a los dto? en el dto seguro que no y en el resto depende, si acceden a algo de fuera si, pero si accedes a algo de fuera si, la forma mas facil es comprobar que es lo que estas haciendo y hacer f12 en la clase y mirar si usa IDisposable e implementarla

  • @LicMiranda
    @LicMiranda 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    tengo una duda...si tengo una app q se conecta a sql.. pero antes de terminar cierra la conexion osea conection.close(); .. asi como tmb usa un fichero en donde escribe StreamWriter sw pero luegosw.close(); ... es necesario usar IDisposable?? si durante el codigo fui cerrando todo...

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      hola! sí, tienes que llamar dispose. Si la clase que estas creando utiliza una clase que implementa IDisposable, debes limpiar los recursos con .dispose(). En el 99% de casos implementarÃĄs el Dispose utlizando using(){}.
      TÃĐnicamente en streamwriter.close llama a .dispose así que en el stream te da igual uno que el otro, pero como es un caso excepcional yo lo ignoraría.
      Un saludo!

  • @TioCachasDeOro
    @TioCachasDeOro 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Existen herramientas para detectar los recursos que no se liberaron?

    • @NetMentor
      @NetMentor  2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      nope, no hay nada, lo Único que podrias tener es algo que te cierre conexiones y tal, pero automatico no hay nada, o por lo menos nada que yo sepa.

  • @jorgemar1469
    @jorgemar1469 7 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    cuando inyecto por dependencia mi dbcontext es necesario usar using?

    • @NetMentor
      @NetMentor  7 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™ +1

      Nope, deja a EF que administre el lifetime

    • @jorgemar1469
      @jorgemar1469 7 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

      @@NetMentor gracias

  • @Jocker88
    @Jocker88 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    "un parche bastante malo, eso no lo tenemos que hacer jamÃĄs" xD. Bien, llama a mi empresa que no quiere pagar el tiempo que vale arreglar el problema jajaja, resumen, cada vez el pool es mayor y llegarÃĄ el punto que los hierros no den para mÃĄs.
    Buen vídeo, gracias!
    P.D.: Me enganchÃĐ a tu canal una cosa barbara!

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      haha y lo he visto ya, de normal no recibo tantos mensajes 😂
      Espero que pulses en la publi 😂😂

  • @hector9079
    @hector9079 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    TendrÃĄs el cÃģdigo de ejemplo?

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      Hola! En el primer comentario del vídeo, tienes un enlace al blog, donde esta el cÃģigo, tanto explicado en el propio post, como un link a GitHub. Un saludo!

    • @hector9079
      @hector9079 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Ok gracias, esta muy bueno tu video 👍

  • @Lorshi
    @Lorshi 11 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    amigo muy interesante tu video pero me quema los ojos ver el tema claro de noche

  • @arturosalas8799
    @arturosalas8799 8 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Útil pero aun no me queda muy claro.

  • @adolfovanegas7802
    @adolfovanegas7802 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Pero en este caso, using no resuelve este problema sin tener qee implementar disponse. Saludos

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      No entiendo muy bien a quÃĐ te refieres, ha que cuando utilizas using estas utilizando dispose

    • @adolfovanegas7802
      @adolfovanegas7802 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@NetMentor bien, usted explica que para cerrar la coneccion de base de datos, hay que implementar Idisponsable, yo actualmente libero el recueso encereando la coneccion de base de datos, con un using, pero me interesa saber si la forma que explica , es mas efectiva. Saludos.
      Algo cm esto:
      using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); ... command.ExecuteNonQuery();
      } aqui se libera el recurso

    • @NetMentor
      @NetMentor  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Si, en ese caso es igual se libera al cerrar el using.
      Pero esa forma de implementar el mysqlconnection no es 100% correcta ya que si tuvieras que por ejemplo insertar en 5 tablas distintas necesitarías hacerlo todo dentro del using lo que no sería correcto. (Ya que si una falla debería cancelar/rollback)
      Para el ejemplo que acabo de decir, necesitarÃĄs abrir una transacciÃģn , y cuando terminas con la Última cerrar, commit y liberar memoria, eso solo lo puedes hacer si implementado un wrapper sobre la conexiÃģn. (Hablo siempre con la idea de dejar un cÃģdigo limpio y ordenado, obviamente si se puede hacer )
      El ejemplo era para explicar idisposable, mÃĄs que para explicar cÃģmo cerrar la conexiÃģn a la base de datos.
      Un saludo.
      Edit: bÃĄsicamente es mejor utilizar un wrapper ya que así puedes reutilizar la conexiÃģn.

    • @adolfovanegas7802
      @adolfovanegas7802 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@NetMentor muchas gracias, voy a seguir leyendo al respecto, gracias por tu tiempo.