Alphasite

The programmers site

Estadísticas web

Estadisticas web

Publicidad

Languages

Inicio de sesión

Google AdSense

Encuesta

En línea

En este momento hay 0 usuarios y 14 invitados en línea.

Trucos

El mundo del runtime en delphi.

Tiempo de diseño y tiempo de ejecución

En Delphi existen dos conceptos que suelen surgir bastante a menudo, tiempo de diseño (design time) y tiempo de ejecución (run time).

El concepto de tiempo de diseño se refiere, de alguna forma, al sistema de diseño del IDE de Delphi, es decir, la parte en la que arrastramos forms, botones, campos de texto, etc ... y los situamos en las posiciones que queremos, es decir, realizamos el diseño de nuestra aplicación.

El tiempo de ejecución se refiere al tiempo durante el cual el programa esta ejecutando, es decir, el tiempo de vida de la aplicación.

Tiempo de diseño vs Tiempo de ejecución

Cuando estamos creando nuestra aplicación, la forma más natural de definir el aspecto de esta ir creando los forms que necesitemos e ir añadiendo botones, campos de texto y otros y situandolos en pantalla hasta encontrar el diseño que buscamos.

Cada vez que creamos un form delphi automáticamente crea una nueva unidad (.pas) y un nuevo fichero de descripción de formulario (.dfm). El IDE de Delphi se encarga de ir modificando estos dos ficheros automáticamente para reflejar los cambios que vamos haciendo. Por ejemplo, vamos a echar un vistazo a un dfm de ejemplo que contiene un Form (Form1) que a su vez contiene un TMemo y TButton.

Obtener el uso de memoria de un proceso.

Introducción

Hace poco me he encontrado en el trabajo con un programa que estaba haciendo estaba teniendo pérdidas de memoria, no demasiada cada vez pero si lo suficiente como para convertirse en un problema a medio plazo.

Cuando te encuentras un problema de consumo de memoria lo más habitual es mirar el código de la zona en la que piensas que puede estar el problema intentando encontrar el lugar donde consumes memoria que luego no vas a liberar, o bien recurrir a algún programa de monitorización de memoria que te ayude a encontrar dichos problemas (yo no he tenido suerte con ellos).

Tipos de datos. Pipe (o Tuberí­a)

Introducción

Un pipe o tubería es una estructura de datos que representa un canal de comunicación con una estructura de tipo FIFO (primero en entrar, primero en salir).

La denominación de tubería (en ingles pipe) viene del concepto de que los datos que introducimos o empujamos por un extremo de la tubería "aparecen" en el extremo contrario. Si realizamos una operación de lectura en la tubería y no hay datos en esta el hilo llamante se quedará bloqueado hasta que haya datos. Si realizamos una escritura en la tubería y esta ha alcanzado su tamaño máximo el proceso que desea escribir en la tubería se quedará bloqueado hasta que algun lector saque un dato.

Distancia geodésica entre dos puntos

Distancia geodésica

Cuando hablamos de la distancia entre dos puntos solemos referirnos a la distancia en linea recta entre esos dos puntos. Sin embargo cuando queremos calcular la distancia entre dos puntos situados sobre una esfera (en mi caso dos puntos sobre la superficie de la tierra) estamos hablando de la distancia geodésica entre esos dos puntos.

Solo pongo esta función aqui porque en el trabajo necesito calcular la distancia geodésica entre dos puntos y estaba usando una librería COM que era excesivamente lenta para lo que necesitaba (4 milisegundos frente a 1 microsegundo). No tengo ni idea de como funciona lo que pongo debajo (si tengo tiempo lo miraré más detenidamente y trataré de explicarlo (hasta donde yo se consiste en aplicar la formula de la longítud de arco de una circunferencia (aplicando además en este caso una desviación, ff, por el achatamiento de la tierra) dadas la latitud y longitud de cada punto)). La función está adaptada de un código de Visual Basic de Jay Tanner para poder usarla en Delphi.

Medir el tiempo de ejecución de un fragmento de código

Introducción

En determinadas ocasiones necesitamos saber el tiempo que tarda una determinada rutina en ejecutar generalmente por que creemos que un determinado fragmento esta tardando más de lo esperado y queremos saber donde está el cuello de botella o por que tenemos alguna aplicación que tiene establecidos unas limitaciones de rendimiento que queremos cumplir.

Hay varias funciones en el la libreria kernel32.dll de windows que pueden ayudarnos en nuestra tarea. GetTickCount (y GetTickCount64) y la combinación de QueryPerformanceCounter y QueryPerformanceFrecuency.

Obtener el tiempo de CPU de procesos y tareas

Introducción

Lo primero que tenemos que considerar al intentar obtener los tiempos de uso de CPU de los procesos de Windows y de sus tareas es el hecho de que windows no está, mágicamente, calculando dicho porcentaje.

En lugar de mantener un porcentaje que no le serviría para nada, Windows, para cada proceso, guarda el tiempo de CPU que este ha estado en ejecución en modo usuario, el tiempo que ha estado en ejecución en modo sistema y el instante de creación del proceso.

Dados estos datos no es posible obtener directamente el consumo de CPU instantaneo de un proceso. Podremos obtener el consumo medio de uso de CPU por parte del proceso haciendo (TiempoMedio = TiempoUsuario + TiempoSistema / TiempoActual - TiempoCreación). Podríamos decir que la medida del consumo instantaneo de CPU es como el potencial eléctrico, no existe XD.