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.
Genial NetMentor ! Esta bien des referenciar los handler a eventos que se hallan asignados en la implementaciÃģn del Dispose(). Dispose() { myEvent -= HandlerMethod }
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
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.
@@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
Windows Form: View -> creo objeto -> SuplidorController -> creo objeto -> SuplidorDTO & SuplidorDTA, mi pregunta: Debo implementar la Interfaz IDisposable en las tres clases???
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
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...
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!
"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!
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!
@@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
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.
Blog: www.netmentor.es/Entrada/implementar-idisposable
Tiwtter: twitter.com/NetMentorTW
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.
Video muy claro y ejemplos perfectos, gracias y felicitaciones.
Grandioso video, muchas gracias y saludos desde MÃĐxico
Gracias!
Excelente video, hacer mas con los recursos minimos necesarios y asà ahorrar recursos. Muchas gracias
muchas gracias, muy interesante.
Genial NetMentor !
Esta bien des referenciar los handler a eventos que se hallan asignados en la implementaciÃģn del Dispose().
Dispose() {
myEvent -= HandlerMethod
}
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) ð
@@NetMentor Se me olvido el "?". Entonces esta bien y no tengo que cambiar mi habito. Gracias, saludos !
âĪïļ gracias!
Muy buen video
Gracias !
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
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.
@@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
Pues posiblemente lo suba, eso sÃ, no se.cuando, tengo una larga lista de pendientes primero ð
Windows Form: View -> creo objeto -> SuplidorController -> creo objeto -> SuplidorDTO & SuplidorDTA, mi pregunta: Debo implementar la Interfaz IDisposable en las tres clases???
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
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...
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!
Existen herramientas para detectar los recursos que no se liberaron?
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.
cuando inyecto por dependencia mi dbcontext es necesario usar using?
Nope, deja a EF que administre el lifetime
@@NetMentor gracias
"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!
haha y lo he visto ya, de normal no recibo tantos mensajes ð
Espero que pulses en la publi ðð
TendrÃĄs el cÃģdigo de ejemplo?
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!
Ok gracias, esta muy bueno tu video ð
amigo muy interesante tu video pero me quema los ojos ver el tema claro de noche
Útil pero aun no me queda muy claro.
Pero en este caso, using no resuelve este problema sin tener qee implementar disponse. Saludos
No entiendo muy bien a quÃĐ te refieres, ha que cuando utilizas using estas utilizando dispose
@@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
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.
@@NetMentor muchas gracias, voy a seguir leyendo al respecto, gracias por tu tiempo.