ventajas variable tipos tecnologia sociales redes perjuicios para los las fundamentales estudiantes desventajas declarar datos beneficios adolescentes delphi

delphi - variable - ¿Hay alguna ventaja en el uso de recursos en lugar de una cadena de const?



ventajas y desventajas de las redes sociales para los estudiantes (5)

¿Me diría si hay alguna ventaja (menos espacio de almacenamiento, aumento de velocidad, etc.) en el uso de:

resourcestring MsgErrInvalidInputRange = ''Invalid Message Here!'';

en lugar de

const MsgErrInvalidInputRange : String = ''Invalid Message Here!'';


Como han mencionado otros, las cadenas de recursos se incluirán en un recurso separado dentro de su exe, y como tal tienen ventajas cuando necesite atender múltiples idiomas en la interfaz de usuario de su aplicación.

Como algunos también han mencionado, las cadenas constantes se incluyen en la sección de datos de su aplicación.

Hasta D2007

En las versiones de Delphi hasta D2007 , las cadenas const se almacenaron como cadenas Ansi, requiriendo un solo byte por carácter, mientras que las cadenas de recursos se almacenaron en UTF-16: la codificación predeterminada de Windows (aunque quizás no para Win9x). IIRC D2007 y las versiones anteriores no eran compatibles con archivos de unidades codificadas en UTF-8. Por lo tanto, cualquier cadena codificada en sus fuentes tendría que ser soportada por las páginas de códigos ANSI, y como tal, probablemente no vaya más allá del Plano Multilingüe Unicode Basic. Lo que significa que solo se usaría la parte UCS-2 de UTF-16 y todas las cadenas podrían almacenarse en dos bytes por carácter.

En resumen: hasta las cadenas constantes D2007 toman un solo byte por carácter, las cadenas de recursos toman dos bytes por carácter.

D2009 y hasta

Delphi fue unicode habilitado en la versión D2009. Desde entonces las cosas son un poco diferentes. Las cadenas de recursos aún se almacenan como UTF-16. No hay otra opción aquí, ya que son "gestionados" por Windows.

Sin embargo, las cuerdas de Consts son una historia completamente diferente. Desde D2009, Delphi almacena múltiples versiones de cada cadena const en su archivo ejecutable. Cada versión en una codificación diferente. Const se puede almacenar como cadenas Ansi, cadenas UTF-8 y cadenas UTF-16.

Cuál de estas codificaciones se almacena depende del uso de la const. Por defecto, se utilizará UTf-16, ya que esa es la codificación interna predeterminada de Delphi. Asigne la misma constante a una cadena "normal" (UTF-16), así como a una variable AnsiString, y la constante se almacenará en el exe codificado tanto en UTF-16 como en Ansi ...

De-duping

A juzgar por su apariencia (experimentando con D5 y D2009), Delphi "de-dupes" const strings, mientras que no hace esto para resurgir las cadenas.


Con compilación de recursos, el compilador coloca esas cadenas como un recurso de cadena en el ejecutable, lo que permite que cualquiera (digamos su equipo de traducción) las edite con un editor de recursos sin necesidad de volver a compilar la aplicación, o tener acceso al código fuente.


La opción const será más rápida que la selección de recursos, ya que esta última llamará a la API de Windows para obtener el texto del recurso. Puedes hacerlo más rápido usando algún mecanismo de caché. Esto es lo que hacemos en nuestro mejorado Delphi RTL.

Y es una buena idea cargar primero los recursos en una cadena, si tiene que acceder muchas veces a un contenido de recursos.

El punto principal de los recursos es permitir i18n (internacionalización) de su programa.

Tienes el Administrador de traducciones con algunas ediciones del IDE de Delphi. Pero se basa en DLL externa.

Puede usar el sistema gettext, proveniente del mundo Linux, desde http://dxgettext.po.dk que se basa en archivos .po externos.

Incluimos nuestro propio mecanismo i18n en nuestro marco, que traduce y almacena en caché el texto de recursos, y se basa en archivos .txt externos (puede usar archivos de texto UTF-8 o Unicode, desde Delphi 6 hasta XE). El almacenamiento en caché lo hace tan rápido como el uso constante. Consulte http://synopse.info/fossil/finfo?name=SQLite3/SQLite3i18n.pas

Hay otras soluciones de código abierto o comerciales alrededor.

Sobre el tamaño de almacenamiento, los recursos se almacenan como buffers UC2. Por lo tanto, los recursos utilizarán más memoria que la cadena hasta Delphi 2009. Desde Delphi 2009, todas las cadenas son únicas, es decir, UCS2, por lo que no tendrá mucho más tamaño de almacenamiento. En todos los casos, el tamaño de almacenamiento del texto no es el parámetro de mayor tamaño para una aplicación (los mapas de bits y el tamaño del código tienen un efecto mucho mayor que el exe final).


Las cadenas de recursos se almacenan como entradas EXTRAÍBLES en su recurso exe, consts se almacenan como parte del segmento de datos fijos. Como son parte de la sección de recursos, puede extraerlos y los DFM, traducirlos y almacenarlos en un módulo de recursos (DLL de solo datos). Cuando se inicia una aplicación de Delphi, busca esa DLL y usará las cadenas en lugar de las que se incluyen en su EXE para cargar las traducciones.

El docwiki de Embarcadero cubre el uso del Administrador de traducción , pero muchas otras herramientas de traducción de Delphi también usan cadenas de recursos.


También hay una tercera opción que es:

const MsgErrInvalidInputRange = ''¡Mensaje no válido aquí!'';

El último debería ser el que tenga más rendimiento porque le dice al compilador que no asigne espacio en el segmento de datos, podría poner la cadena en el segmento de código. También recuerde que lo que se podría hacer con las constantes escritas depende de la directiva $ WRITEABLECONST, aunque no sé qué compilador exactamente cuando está encendido o apagado.