Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2013
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 192
Poder: 13
elcharlie Va por buen camino
Reducir Tamaño DLL en XE3

Buenas:
Estoy Utilizando por primera vez el Delphi XE3, y al crear una dll, veo que al generarla ocupa 1.5 megas en release y 10 mb en debug, y en delphy 7 100 kb.
La dll no tiene nada, es una chorrada, pero no consigo bajarle el tamaño. He estado mirando por ahi, pero aun asi no consigo bajarle mas que 300 kb.
Alguien Sabe algo?
dejo el codigo por si alguien quiere hacer la prueba
Código Delphi [-]
library UnioxDll;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

{$IF CompilerVersion >= 21.0}
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
{$IFEND}
uses
  System.SysUtils,
  Vcl.Forms,
  System.Classes;

{$R *.res}

function Mensaje( mensaje: PAnsiChar):boolean;stdcall;
var
 mens: String;
begin
  mens:= String(mensaje);
  Application.MessageBox(pChar(mens),'',0);
  result:= True;
end;

exports Mensaje;
begin
end.
Responder Con Cita
  #2  
Antiguo 24-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
De 100 a 300 KB no parece ser una diferencia importante. Es normal que desde Delphi 7 hasta Delphi XE3 se haya agregado en la VCL código de inicialización adicional en varias de las unidades que son referidas a través de las cláusulas Uses, además de algo de código máquina adicional por parte del enlazador por alguna cuestión operativa de las más recientes versiones de Windows.

¿Te es estrictamente necesario bajar aún más el tamaño de la biblioteca DLL? Supongo que al agregarle más funciones el aumento que ahora tienes (200 KB) no será proporcional, ¿o sí?

Por otra parte, fue acertado que desactivaras la inclusión de RTTI, que seguramente es una de las principales razones por las que en principio tu DLL se generó con un tamaño de 1.5 MB.

Saludos.
Responder Con Cita
  #3  
Antiguo 24-04-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.122
Poder: 35
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La unidad "Forms" también pesa lo suyo. Si sólo vas a usarla para luego llamar a "Application.MessageBox()", podrías usar el "MessageBox" que viene en la unidad "Windows".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 24-04-2013
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 192
Poder: 13
elcharlie Va por buen camino
Gracias por vuestras respuestas, pero la diferencia no es de 100 a 300 KB, es de 1.5 Mb a 100 KB, quizas me he explicado mal. Antes de desactivar la inclusion RTTI pesaba 1.8 Mb, de ahi la diferencia. Y lo de usar Forms, es solo por prueba, pero compilando los fuentes en XE3 y delphi 7 la diferencia sigue siendo muy grande, de 1.5 Mb a 100 KB
Responder Con Cita
  #5  
Antiguo 24-04-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.122
Poder: 35
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por elcharlie Ver Mensaje
Gracias por vuestras respuestas, pero la diferencia no es de 100 a 300 KB, es de 1.5 Mb a 100 KB, quizas me he explicado mal. Antes de desactivar la inclusion RTTI pesaba 1.8 Mb, de ahi la diferencia. Y lo de usar Forms, es solo por prueba, pero compilando los fuentes en XE3 y delphi 7 la diferencia sigue siendo muy grande, de 1.5 Mb a 100 KB
A ver. Existe cierta diferencia de peso entre diferentes versiones de Delphi, eso es innegable. Probablemente, se trata de lo que ha explicado el compañero Al más arriba. Ahora bien, la unidad "Forms" es una de las más pesadas, y, si la añades a tu DLL (compilada en Delphi 7) verás que esta no tiene 100 Kb, sino unos 300 Kb. Y lo mismo ocurre en el resto de versiones de Delphi en relación a esta unidad "Forms". Por otro lado, si pruebas a comprimir la DLL verás que se reduce el tamaño, lo hagas con UPX o en formato Zip. Francamente, no creo que hoy día el tamaño (entre 300 y 600 Kb) sea demasiado importante, en mi opinión. Además de que no se trata de "basura", sino que la VCL "se ha agrandado un poco", pero, probablemente, también ofrezca más posibilidades y/o sea mejor.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 24-04-2013 a las 15:49:15.
Responder Con Cita
  #6  
Antiguo 24-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.609
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Disculpa, elcharlie, había interpretado mal esta parte:
Cita:
Empezado por elcharlie Ver Mensaje
[...] no consigo bajarle mas que 300 kb.
Bueno, entonces hablamos de 100 KB a 1.5 MB.

He de decir que no había reparado en el hecho de que la directiva $RTTI es local, por lo que no debe ser mucho el efecto de reducción conseguido en el ejemplo que expusiste. Encontré este material que quizá te convenga leer.

Por otra parte, si de verdad el tamaño del módulo ejecutable es un problema (muy rara vez lo es), me parece que una alternativa de solución sería que tu programa prescinda de referir (directa o indirectamente) a varias de las clases de la RTL y de la VCL compiladas con información de RTTI. En casos tan especiales puede que privilegiar las llamadas directas a la API de Windows, como ya dec sugirió, no sea mala idea.

¿Cuál es la justificación para buscar reducir el tamaño de esa DLL? ¿Temes que al agregarle más funciones su tamaño se incremente a decenas de megas? Yo lo dudo, el mayor incremento no tiene que ver con el código nuevo que escribas, sino con el que ya viene en Delphi "de cajón".

Saludos.
Responder Con Cita
  #7  
Antiguo 24-04-2013
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 192
Poder: 13
elcharlie Va por buen camino
Muchisimas gracias por vuestra ayuda, la verdad es que si que tenia bastante miedo en que la dll fuera creciendo ha medida que le metia funciones, pero esta tarde he estado implementandola, y su peso solo ha incrementado hasta los 2 megas, y la verdad es que he tenido usar muchas referencias. No obstante, era tan solo una curiosidad, ya que me ha chocado bastante que una chorrada de dll así ocupara tantisimo en XE3.
Gracias de nuevo.
Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Reducir tamaño de un ejecutable mrmanuel Varios 12 23-08-2013 02:35:30
Reducir el tamaño de una imagen pablopessoa Varios 6 11-10-2008 13:18:40
Reducir tamaño bmp atos Impresión 0 18-07-2008 11:43:02
reducir tamaño del LOG orodriguezc MS SQL Server 3 09-03-2004 14:50:35


La franja horaria es GMT +2. Ahora son las 23:27:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi