Jump to content
Kline777

Ferramenta para indicar units não utilizadas

Recommended Posts

Kline777

Boas,

Como side project/passatempo, estava a pensar em fazer uma aplicaçãozita para correr os ficheiros pas de um dado projecto e verificar que units das que estão no USES estão de facto a ser usadas.

Ao longo do desenvolvimento, acabamos por deixar muitas units aqui que no fim nao sao usadas e dá a um aumento do exe e possivelmente do desempenho da aplicação.

Antes de começar, no entanto, alguém sabe se já existe algo para isto? E/ou mais importante: Sabem se o proprio delphi faz isto sozinho ao compilar em release mode? (ou seja, ignorar as units nao usadas)

Share this post


Link to post
Share on other sites
nunopicado

Sozinho não faz (devia).

Se tem alguma ferramenta manual que o faça, desconheço (dava jeito).

Há tempos li que existia uma ferramenta externa para isso (plugin ao IDE), mas nunca cheguei a descobrir o nome.

No meu software de POS, passei de um exe de 50mb, com meia dúzia de coisas feitas, para um exe de 14.5mb com o programa muito mais completo, ambos em release.

Tudo o que fiz foi remover (manualmente) as units não usadas, e substituir alguns componentes que eram facilmente subsituíveis por outros, nativos, para o mesmo efeito!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Exactamente! Estive a ver agora e parece que a AQTime tem uma ferramenta para isso. Supostamente vem com o IDE mas eu desinstalei e agora nao consigo confirmar.

Share this post


Link to post
Share on other sites
nunopicado

Também não instalei esse... :P

O cnPacks IDE Wizards também diz que tem!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Tentei instalar isso mas as ferramentas do IDE dão erro no arranque... Se puderes/quiseres tentar, depois diz algo

Share this post


Link to post
Share on other sites
nunopicado

Instalei, sem problemas...

Mas ao correr o unit cleaner, parece-me (não deu para testar a 100%, que ele tenciona limpar mais do que deve!

Tenho de testar melhor, pode ter sido só impressão!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Hum... só se tentar outra vez. que link usaste para sacar isso?

Instalei o do AQTime mas não serve para nada disto, faz o levantamento das units nao usadas mas é do projecto todo, e não dá para ver nada de jeito.

Share this post


Link to post
Share on other sites
nunopicado

Este: http://www.cnpack.org/download.php?id=442〈=en

Bem, já deu para reparar que ele come virgulas! lol

Uma das virgulas que separam as units desapareceu também, tive de lá ir recolocar.

Num programa de teste, cujo exe (debug) estava com 34764kb, depois do clean ficou com 21018kb.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Instalo o exe, corro e o IDE dá erro na DLL ao arrancar. Não me aparece nenhuma toolbar nova no IDE. Não te deu nenhum problema?

Share this post


Link to post
Share on other sites
nunopicado

Nenhum.

No meu não há toolbar, há um novo menu chamado cnPacks.

Falando nisso, que não tem nada a ver, usas o GExperts?

PS: Experimenta correr o installer como administrador...

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Por acaso nao tenho, já instalei mas nao vi nada que me desse realmente jeito entao tirei.

O erro que ele dá é que nao encontra a dll do CNPack no caminho tal.... mas ela está lá. Não percebo :P

Era do meu IDE. Já tenho outras coisas instaladas lá e parece que dá conflito. Instalei no XE3 e deu logo :P

Share this post


Link to post
Share on other sites
nunopicado

Pois, eu também foi no XE3...

O GExperts não dispenso, especialmente pela pesquisa de procedimentos... Mas tem lá mais umas coisas interessantes...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Eh pah... nao apaga bem o que devia :P nao tirou uma carrada de coisas que podia tirar acho eu.

Mas fazer uma brincadeira destas é capaz de dar trabalho :P

Tava a pensar tipo:

  • Para cada unit:
  • Ler todas as units que estao entre o uses e o ; que o termina
  • Guarda-las numa lista para marcar quais sao usadas ou nao
  • Guardar todas as variaveis/types que sao declaradas em cada uma dessas units;
  • Ler a unit e sempre que for declarada uma variavel, procura-la na lista de units e marcar como usada
  • No fim apagar as nao usadas

Acham q é o suficiente?

Share this post


Link to post
Share on other sites
nunopicado

E as inicializações/finalizações de units, de que não usas função alguma, mas que precisam de lá estar...

É complicado! :)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Kline777

Hum... das-me um exemplo? Estas a falar de importar uma unit so pelas suas inicializações/finalizações?

Share this post


Link to post
Share on other sites
nunopicado

Sim, é disso!

Eu nunca o fiz, pelo menos conscientemente.

Mas a possibilidade existe, logo, tem de ser levada em conta!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Gilson Nunes

mas o compilador q notifica esse tipo de coisa. não?

exemplo: Unit1.pas(92,13) Hint: Unit "uHelperStream" not used in Unit1

Share this post


Link to post
Share on other sites
nunopicado

mas o compilador q notifica esse tipo de coisa. não?

Isso é um warning, sim...

Mas a ideia do Kline era remover essas units automaticamente, pois ainda que o compilador dê essa chamada de atenção, compila-as na mesma, tornando o binário maior do que o necessário!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.