Friday, 7 August 2009

unidades innecesarias en Delphi

Cuando nuestra aplicación va creciendo, vamos haciendo referencia a diferentes unidades en la sección uses de Delphi. Cada vez que añadimos un componente se añaden sus diferentes vínculos en ésta sección, pero cuando quitamos el componente, éstas no desaparecen. El problema que se nos plantea aquí es que si éstas unidades no desaparecen, el .dcu (Delphi compiled Unit) se carga en nuestra aplicación aunque no se utilice. Una de la soluciones que tenemos es utilizar la aplicación ICARUS de Peganza Software. El producto es totalmente libre, y mediante unos cuantos clicks, la aplicación es capaz de decirnos que unidades de nuestros uses no nos hacen falta y las podemos quitar de nuestro proyecto. Es como hacer referencia a una librería, por ejemplo una DLL, que no se utiliza nunca, pero que igualmente la tenemos dentro de nuestra aplicación.

Si queremos que nuestra aplicación esté limpia con sus referencias correspondientes, mejor utilizar una aplicación que nos informe de ésto. Con otros IDE's como Eclipse por ejemplo, ésto no pasa, ya que en el momento que uno de los imports no se utiliza aparece subrayado, e incluso podemos hacer botón derecho sobre el texto y eliminar los unused imports. Pero Delphi no tiene esta opción. Esperemos que en alguna versión posterior haya algo parecido.

Una vez instalada la aplicación, la iniciamos y nos aparece un asistente que nos guiará a través de la carga del proyecto y parametrizar las opciones más comunes:

Para hacer un pequeño test de la aplicación, he creado un proyecto Demo con los siguientes la siguiente lista de unidades en el uses:

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, ExtCtrls, TeeProcs, TeeDraw3D, IWVCLBaseControl,
  IWBaseControl, IWBaseHTMLControl, IWControl, IWHTMLControls;

type
  TForm3 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

end.

Si ahora ejecutamos el ICARUS con el proyecto obtenemos:

Aparece una lista con las unidades que no encuentra, y con las unidades que no son necesarias para nuestro proyecto:

== Messages unnecessary (used by unit with init)
== SysUtils unnecessary (has initialization, used by unit with init)
== Variants unnecessary (has initialization, used by unit with init)
== Classes unnecessary (has initialization, used by unit with init)
== Graphics unnecessary (has initialization, used by unit with init)
== Controls unnecessary (has initialization, used by unit with init)
== StdCtrls unnecessary (used by unit with init)
== Dialogs unnecessary (has initialization, used by unit with init)
== ExtCtrls unnecessary (has initialization, used by unit with init)
== DB unnecessary (has initialization, used by unit with init)
== ADODB unnecessary (has initialization)
En mi opinión, la aplicación es un poco liosa, y cuesta un poco encontrar la lista de los unnecessary units, pero en general si Peganza lo actualiza regularmente (la última actualización del software fue el 14 de julio del 2009) tendremos una aplicación muy buena para éste tipo de consultas.

  • Enlaces de interés:
Uses List analyzer for delphi.

0 comments:

Post a Comment