Ver por etiquetas

Todas las etiquetas » .Net (RSS)

Emitiendo para toda la galaxia, ¿hay alguien ahí?: Lo que todo desarrollador debe saber sobre los eventos en .Net

La manera que las clases tiene de alertar a otras clases en los lenguajes orientados a objetos modernos es lanzar eventos. Una clase que no expone eventos, hace mucho más ardua la tarea de los desarrolladores que la consumen a la hora de detectar cambios en su estado. Una clase sin eventos es un clase incomunicada, que dirían los O’funk’illo. En en sentido amplio, se podría decir que toda clase que diseñemos y que mantenga un estado, debería tener eventos...
Publicado por Rodrigo Corral | 9 comment(s)

Modelos de salud: ¿Cúanto tarda una operación determinada de mi aplicación?

Poder reponder esta simple pregunta cuando nuestra aplicación está en producción nos puede dar un motón de información sobre la salud de la misma. Todo modelo de salud de una aplicación debería darnos la respuesta a esta simple pregunta para las operaciones más significativas que realiza la aplicación. Evidentemente, en situaciones donde hay problemas de rendimiento, siempre podríamos responder esta cuestión utilizando un...

El cuento de los tres desarrolladores…

Eransé que se eran tres desarrolladores. Los tres tenían que sincronizar sus hilos, habían oido hablar de las terribles historias sobre problemas de corrupción de memoria, condiciones de carrera, y demás ‘lobos’ capaces de devorar cualquier aplicación cuando se ponía en producción. Menos más que existían los objetos de sincronización pensaron y se pusieron a trabajar. El primero de los desarrolladores pregunto...

¿Aquí quíen #@$@#~€ barre? … o lo mínimo que todo desarrollador debe saber sobre IDisposable y los finalizadores

Durante mucho tiempo, mi cuadrilla, disfruto de un chamizo donde nos reuníamos para fumar, beber, comer, ver cine, jugar a cartas y otras cuestiones menos confesables… fueron años divertidos. El chamizo siempre planteaba la misma duda… ¿a quien coño le toca barrer? La gente, ya se sabe, a la menor ocasión, se escudaba en las falta de reglas claras y la consecuencia es que nadie barría… al final la acumulación de colillas, cascos de cervezas y en general residuos no orgánicos de todo tipo hacían que...
Publicado por Rodrigo Corral | 14 comment(s)
Archivado en:

El cambio horario y .net

Este próximo domingo, 26 de Octubre, se ajustará la hora en España al horario de invierno. A las 3:00 serán las 2:00. La buena noticia es que podremos dormir una hora más, la mala, que esto puede afectar a nuestras aplicaciones. Fijaros por ejemplo el caso de una aplicación que calcule la producción de piezas de una máquina por hora, por poner un ejemplo. Si queremos saber la producción media por hora entre las 1:00 y las 4:00 de la mañana, deberemos tener en cuenta que en realidad habrán transcurrido...
Publicado por Rodrigo Corral | 7 comment(s)
Archivado en:

Invocar delegados anónimos asíncronamente (o como usar el pool de hilos en dos líneas de código)

Una de las características mas interesantes de los delegados es que pueden ser invocados de manera asíncrona. La pega de los delegados es que hay que declararlos, y hacer una función para asignarla al delegado y luego ya podremos hacer la invocación asíncrona. Las ventajas de la invocación asíncrona respecto a crear un hilo explicitamente son varias: menor cantidad de código y sobre todo, que el hilo será un hilo de pool de hilos de .Net, con las ventajas para el rendimiento que esto lleva asociadas...
Publicado por Rodrigo Corral | 6 comment(s)
Archivado en: ,

Bugleanos... o la historia de un bug que no lo es

Desde que apareció el primer bug de la historia , los desarrolladores los venimos sufriendo con frecuencia. Siempre que nos enfrentamos a un comportamiento anómalo, pasamos por varias fases. En una primera fase asumimos que hemos cometido un error, depuramos y le damos vueltas a asunto hasta que, varias madiciones depués, pasamos a la siguiente fase. No puede ser mi fallo, el error tiene que estar en las librerías que estoy utilizando. Y pasamos a buscar un 'workarround'... Total no nos queda...
Publicado por Rodrigo Corral | 11 comment(s)
Archivado en: ,,

Bricomanía: añadiendo caché a nuestros servicios WCF

Resulta que andaba yo el otro día, como loco, buscando el equivalente al parámetro CacheDuration del atributo WebMethod de ASP.Net en WCF. Resumiendo necesitaba algo que me permitiese establecer declarativamente, en tiempo de desarrollo, que las llamadas a una operación de un servicio WCF devolviesen un resultado cacheado y que este caducase cada cierto tiempo. Esta posibilidad que nos brinda ASP.Net nos permite mejorar muchísimo la escalabilidad de nuestros servicios evitando que lleguen hasta el...

Forzar la ejecución en 32 bits de aplicaciones .Net

Los sistemas de 64 bits están irrumpiendo cada vez con mayor fuerza. Hasta hace poco no era muy habitual el tener que despleguar una aplicación sobre 64 bits .Una de las grandes ventajas de .Net es que esta transición es en gran medida transparente. El compilador de .Net se encargará de compilar nuestra aplicación a 32 o 64 bits según sea la plaforma sobre la que la estamos ejecutando. Esto que sin duda es una gran ventaja sobre los lenguajes nativos pues nos permite no tener que compilar explicitamente...
Publicado por Rodrigo Corral | 12 comment(s)
Archivado en:

Cómo cazar una fuga de memoria en .Net (y II)

Comentaba hace unos días como he sufrido una fuga de memoria en .Net , esas que en teoria son 'imposibles' y presentaba un caso mínimo que lo reproducía. Luego, explique como dilucidar si se trataba de una fuga de memoria manejada o de memoria nativa . Hoy toca hablar de cómo llegue a determinar en que lugar exacto del código se estaba produciendo la fuga de memoria en cuestión. La herramienta que utlice para ello fue el CLR Profiler, que nos permite monitorizar todas las asignaciones de...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,

Mover mensajes entre colas de MSMQ

Trabanjando con MSMQ a menudo nos encontramos con escenarios en los que necesitamos mover todos los mensajes de una cola de MSMQ a otra. Por ejemplo yo me he encontrado con la necesidad de mover los mensajes desde una cola de mensajes 'poison' a la cola a la que estaban destinados originalmente para que sean reprocesados. Existe una manera obvia de mover todos los mensajes de una cola a otra, enumerarlos y volverlos a enviar a la cola original. Pero existe otra manera mucho más eficiente...
Publicado por Rodrigo Corral | con no comments
Archivado en: ,

Cómo cazar una fuga de memoria en .Net (I)

Hablaba en un post anterior de como me las he tenido que ver con una fuga de memoria en .Net recientemente, e incluso ponía un pequeño caso mínimo representativo del problema que he tenido. Hoy toca hablar de como llegue a la conclusión de que estaba ante una fuga de memoria y a la conclusión de que se trataba de una fuga de memoria manejada. Para diagnosticar una fuga de memoria en .Net debemos comenzar por responder dos preguntas, que a continuación veremos. Si diré que la herramienta para contestar...
Publicado por Rodrigo Corral | 4 comment(s)
Archivado en: ,

Fugando memoria con .Net

Una de la grandes maravillas de los lenguajes manejados es que es imposible fugar memoria... al menos en teoria. Pero la verdad es que aunque es mucho más dificil fugar memoria, no es imposible. Es imposible fugar memoria en el sentido clásico del termino, en el sentido de reservar memoria, con un new , un malloc , un SysAllocString , etc y no recordar liberarla con el correspondiente delete , free , o SysFreeString , algo muy común en C o C++, esta es la buena noticia y es más por si sola justifica...
Publicado por Rodrigo Corral | 25 comment(s)
Archivado en: ,

¿Pero dónde $%&Qñ&$ se ha producido la excepción?

Existe un truco bastante simple y útil que nos permite saber en que momento exacto se está producciendo una excepción. Me sorprende que sea desconocido por un motón de desarrolladores con los que me cruzo. Se trata de usar la capacidad del depurador de Visual Studio para que el depurador para la ejecución cuando se produce una excepción de un tipo o tipos determinados (o de cualquier tipo si así lo queremos). Para ello basta con utilizar el dialogo Exceptions (Excepciones) al que se puede acceder...
Publicado por Rodrigo Corral | 8 comment(s)

Depurando servicios de Windows más facilmente

Depurar servicios es una tarea complicada. Esta complejidad tiene su origen en dos aspectos, uno, que es el SCM quien inicia un servicio y por tanto no podemos iniciar los servicios con el depurador adjuntado al proceso (al menos no facilmente) y dos para cuando tenemos oportunidad de adjuntar el depurador, el código de inicio del servicio ya ha ejecutado. Os voy a contar un par de trucos que uso a la hora de depurarlos. El primero es bien simple, se trata de usar la siguiente instrucción: System...
Publicado por Rodrigo Corral | 6 comment(s)
Archivado en: ,

Probar el envio de mails sin usar un servidor SMTP

Todos sabemos que los adminsitradores de red son gente dura de roer. No conozco muchos que estén contentos dandonos acceso por SMTP a 'su' servidor de correo (cosa que me parece muy razonable dicho sea de paso). Pero es cierto que cada vez más y más aplicaciones necesitan por un motivo u otro enviar correos electrónicos. Antes lo que los desarrolladores haciamos era simplement instalarnos un servidor SMTP en nuestra máquina (si las políticas de nuestro administrador nos los permitian), pero...
Publicado por Rodrigo Corral | 6 comment(s)
Archivado en:

Ejecución remota de comandos contra máquinas Unix desde .Net

Estoy involucrado en un interesante proyecto que tiene por objetivo demostrar que VSTS for Tester es una plataforma interesante a la hora de testear arquitecturas no centradas en plataforma Microsoft, arquitecturas muy heterogéneas. Un primer post relacionado este proyecto fue: Pruebas web de Team System usando Firefox . Y seguro que habrá más. Uno de los primeros pasos que tengo que dar es obtener de manera remota información del comportamiento, desde el punto de vista del rendimiento, de una máquina...

PowerShell y MSMQ

Llevo un tiempo con ganas de meterle un poco de mano a PowerShell y por fin he encontrado la ocasión. Siempre he sido un gran amante de los scripts y siempre he sentido un poco de envidia de los poderosos interpretes de comandos del mundo Unix, pero se acabo. Habitualmente uso vbs para mis scripts, es bastante potente y muy simple de programar y además puedo acceder a cualquier objeto COM (lo que es tanto como decir que se puede hacer cualquier cosa). El otro día, harto ya de purgar a mano las colas...
Publicado por Rodrigo Corral | 9 comment(s)
Archivado en: ,,

Cuando .Net conocio a JSON

El propósito de este post es tratar de añadir un poco de luz sobre las opciones con que contamos a la hora de que nuestros servicios web orientados a AJAX usen JSON como protocolo de serialización de los objetos. Hace ya un tiempo escribí en este mismo blog sobre JSON . En ese momento, hace ya unos cuantos meses, JSON no era tan popular. Pero desde entonces, gracias al peso que ha ganado AJAX y en consecuencia JavaScript, JSON es cada vez más y más popular. El motivo de esta popularidad es que es...
Publicado por Rodrigo Corral | 4 comment(s)
Archivado en: ,,,

Rompe tus cadenas...

Ya lo decía Reincidentes en su mítica canción Carmén: Y esto no (qué estás esperando) cambiará (qué estás esperando) sin luchar (rompe tus cadenas) pa salir. Y es que parece mentira como las cadenas y su manipulación vienen siendo un problema desde los tiempos de C. Digo esto por que últimamente me he encontrado con dos usos anómalos de cadenas en código que he visto: El primer uso anómalo consiste en usar el + y el \n o el espacio para escribir cadenas. Solo afecta a la legibilidad y mantenibilidad...
Publicado por Rodrigo Corral | 12 comment(s)
Archivado en: ,
Más artículos Página siguiente >