2010-06-14 10 views
6

Es "Reemplazar componentes no visuales con código", una técnica de optimización probada en Delphi 7. Principalmente con respecto al acceso a la base de datos.Reemplazar componentes no visuales con el código

+1

¿Puede proporcionar alguna referencia a blogs o lo que sea que lo recomiende? Nunca había oído hablar de él antes (lo que no significa nada, por supuesto :) – Blorgbeard

+0

ver el punto no. 8 en http://delphi.about.com/od/objectpascalide/a/speedsize.htm –

+4

Por cierto, gexperts es un gran complemento que convierte los componentes en código. –

Respuesta

1

Esto no es una cuestión de ser un componente o no un componente. Si se trata de acceso a la base de datos, el BDE es extremadamente lento, por lo que cambiarlo por otra cosa es una buena jugada.

Por cierto, la optimización no se trata de "técnicas comprobadas" sino de identificar un problema y resolverlo. Si el problema es el acceso lento a db, entonces esto es lo que tiene que cambiar.

+0

En cuanto al acceso a la base de datos, estoy usando objetos de ado y no bde porque estoy más familiarizado con el ado. –

4

No veo cómo un conjunto de datos basado en formularios/consulta/tabla/etc., sería más rápido o más lento que uno creado en el código. Sin embargo, me gusta ponerlos en el código ya que es más fácil de mantener. He visto pantallas con SQL incrustado en un componente, y luego se anula en el código. Luego, debo detenerme e investigar para determinar qué SQL está realmente vigente. A veces, el SQL en el formulario es bueno, a veces se usa por un tiempo y luego es superado por el código, a veces nunca está activo y el SQL se reemplaza en el formulario createcreate. Así que tengo que determinar si esto es por diseño, o simplemente restos descuidados. Además, es fácil pasar por alto los cambios de SQL en las revisiones de código si están en .DFM y no en .PAS. es decir, no siempre miro el .DFM porque no estoy interesado en si un título de etiqueta cambió o si se movió un botón.

Si bien es bueno para la creación de prototipos, cuando se trata de código de producción, es mejor tener toda su lógica de base de datos (SQL, tablas y definiciones de campo) en el archivo .pas.

Actualización: finalmente he dado CnPack una oportunidad. Entre las docenas de regalos, hay una herramienta brillante llamada "convertir componentes seleccionados al código". Asistente de diseño de formulario | Más ... | Convierta los componentes seleccionados a código. Lo hace todo por ti.

+0

Esto es lo que planeo hacer. El código base en el que estoy trabajando ahora es heredado y no lo que he creado. Así que creo que llevará tiempo mover toda la lógica sql del archivo .dfm al archivo .pas –

+0

@Vinayek - no lo lamentarás. También verifique dos veces para asegurarse de que todas las tablas, conectores de bases de datos, sesiones, etc., estén configurados para estar inactivos. Si encuentra alguno que esté activo, tenga cuidado adicional en el código para asegurarse de que usted mismo abra las conexiones. es decir, puede tener formularios que "tengan suerte" porque la base de datos realmente reside donde el autor original pensó que lo haría. –

+0

Gracias por el consejo. Acabo de comenzar a reescribir la parte de acceso a datos del código. –

9

El sitio web que cita habla sobre la sustitución de un cuadro de diálogo componente con un código que mostraría el cuadro de diálogo sin el uso de ningún componente. La alternativa es escribir un par de líneas de código para configurar y mostrar un cuadro de diálogo cuando lo necesite y omitir el componente por completo. Sin embargo, en realidad no es una optimización en la velocidad o. No es una optimización de velocidad, ya que su código haría exactamente lo que un componente hubiera hecho de todos modos, y no es una optimización de tamaño porque el espacio que cualquier componente ocupa en un programa es insignificante.

Los componentes de la base de datos no son tan fáciles de reemplazar como los componentes del cuadro de diálogo. Casi todo en Delphi está diseñado para usar descendientes de los componentes de la base de datos estándar. Si no usa los componentes, no utilizará ninguna de las capacidades de la base de datos de Delphi. Puede utilizar las API nativas de las bibliotecas de bases de datos si lo desea, pero creo que sería una tontería si su objetivo es realmente la optimización y no ha identificado los componentes como la fuente del comportamiento no óptimo de su programa. Considere cuánto tiempo y esfuerzo le tomaría reescribir su programa sin los componentes de la base de datos.

+0

dialog-box components se cita como ejemplo. Si se crea un objeto de la misma clase que el componente, todas las capacidades de la base de datos de Delphi estarán disponibles. Por favor corrígeme si me equivoco al asumir lo dicho anteriormente. –

+2

Estás en lo correcto ahora, pero confundido. Cree que el consejo fue crear instancias de los componentes de forma manual en lugar de colocarlos en un formulario o módulo de datos. Para los componentes de la base de datos, eso no le da ningún beneficio. De hecho, el consejo fue no usar los componentes * en absoluto *. Para los componentes de la base de datos, esa es una muy mala idea. –

+0

Gracias por su consejo –

0

Generalmente no. No hay gastos generales adicionales al usar un componente no visual. Se crea muy rápidamente y funciona en tiempo de ejecución exactamente a la misma velocidad que uno "creado en código".

+0

Si el componente no visual se reemplaza por código, entonces ciertos componentes no visuales que se usaron solo en un único procedimiento se eliminarán de la memoria una vez que el procedimiento haya finalizado la ejecución. Estoy hablando principalmente de componentes de acceso a datos. –

Cuestiones relacionadas