none
Dimunuir Executavel Windows Form RRS feed

  • Pergunta

  • Boa Tarde,

    Gostaria de saber se existe algum jeito de meus executaveis de aplicativos que desenvolvo com Windows Form fiquem menores.

    Uso DevExpress e meus EXEs ficam muito grandes. No Delphi agente podia rodar os AsPack que reduzia bem o executavel.

     

    Alguma dica?

    Watson Passos


    Watson Passos Especializando em Gerenciamento de Projetos Graduado em Sistemas de Informação
    sábado, 26 de junho de 2010 16:35

Respostas

  • Olá WPassos!

    Bem, uma sugestão que posso lhe dar é sobre modularização. Tínhamos problemas com executáveis muito grandes em nossos sistemas na época do VB6. Resolvemos, então, quebrar o executável em diversas DLL's. O executável, basicamente, permaneceu somente com a janela MDI e as estruturas de menu. Com alguns remendos (via APIs do Windows), conseguimos fazer com que pudéssemos, inclusive, abrir janelas filhas de MDI a partir de DLL's. Cada DLL agrupava um conjunto de janelas que integravam determinadas funcionalidades do sistema. 

    A idéia foi tão boa que, recentemente, iniciamos novos projetos em VB.NET, e estamos mantendo a mesma estrutura. E o mais legal é que, no VB.NET, aquela "gambiarra" para fazer janelas filhas de MDI abrirem a partir de DLL's não é mais necessária. O VB.NET possibilita isso de forma simples e nativa.

    Espero ter ajudado,

    Daniel Ethur - Porto Alegre/RS

    ps.: esqueci de adicionar... no final, a soma dos tamanhos do Executável e das DLL's acaba não diminuindo o tamanho total de um único arquivo Executável... mas facilitam muito a distribuição de versões e o desenvolvimento de novas versões, pois não é necessário envolver todo o sistema em cada manutenção, nem liberar o grande executável em cada pequena correção, por exemplo.

    • Sugerido como Resposta AndreAlvesLimaModerator domingo, 27 de junho de 2010 19:03
    • Editado Daniel Ethur domingo, 27 de junho de 2010 22:00 puxa, não havia comentado a principal vantagem de quebrar um Executável em DLL's
    • Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 2 de julho de 2010 01:50
    sábado, 26 de junho de 2010 22:32

Todas as Respostas

  • Olá WPassos!

    Bem, uma sugestão que posso lhe dar é sobre modularização. Tínhamos problemas com executáveis muito grandes em nossos sistemas na época do VB6. Resolvemos, então, quebrar o executável em diversas DLL's. O executável, basicamente, permaneceu somente com a janela MDI e as estruturas de menu. Com alguns remendos (via APIs do Windows), conseguimos fazer com que pudéssemos, inclusive, abrir janelas filhas de MDI a partir de DLL's. Cada DLL agrupava um conjunto de janelas que integravam determinadas funcionalidades do sistema. 

    A idéia foi tão boa que, recentemente, iniciamos novos projetos em VB.NET, e estamos mantendo a mesma estrutura. E o mais legal é que, no VB.NET, aquela "gambiarra" para fazer janelas filhas de MDI abrirem a partir de DLL's não é mais necessária. O VB.NET possibilita isso de forma simples e nativa.

    Espero ter ajudado,

    Daniel Ethur - Porto Alegre/RS

    ps.: esqueci de adicionar... no final, a soma dos tamanhos do Executável e das DLL's acaba não diminuindo o tamanho total de um único arquivo Executável... mas facilitam muito a distribuição de versões e o desenvolvimento de novas versões, pois não é necessário envolver todo o sistema em cada manutenção, nem liberar o grande executável em cada pequena correção, por exemplo.

    • Sugerido como Resposta AndreAlvesLimaModerator domingo, 27 de junho de 2010 19:03
    • Editado Daniel Ethur domingo, 27 de junho de 2010 22:00 puxa, não havia comentado a principal vantagem de quebrar um Executável em DLL's
    • Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 2 de julho de 2010 01:50
    sábado, 26 de junho de 2010 22:32
  • Olá WPassos!

    Bem, uma sugestão que posso lhe dar é sobre modularização. Tínhamos problemas com executáveis muito grandes em nossos sistemas na época do VB6. Resolvemos, então, quebrar o executável em diversas DLL's. O executável, basicamente, permaneceu somente com a janela MDI e as estruturas de menu. Com alguns remendos (via APIs do Windows), conseguimos fazer com que pudéssemos, inclusive, abrir janelas filhas de MDI a partir de DLL's. Cada DLL agrupava um conjunto de janelas que integravam determinadas funcionalidades do sistema. 

    A idéia foi tão boa que, recentemente, iniciamos novos projetos em VB.NET, e estamos mantendo a mesma estrutura. E o mais legal é que, no VB.NET, aquela "gambiarra" para fazer janelas filhas de MDI abrirem a partir de DLL's não é mais necessária. O VB.NET possibilita isso de forma simples e nativa.

    Espero ter ajudado,

    Daniel Ethur - Porto Alegre/RS

    ps.: esqueci de adicionar... no final, a soma dos tamanhos do Executável e das DLL's acaba não diminuindo o tamanho total de um único arquivo Executável... mas facilitam muito a distribuição de versões e o desenvolvimento de novas versões, pois não é necessário envolver todo o sistema em cada manutenção, nem liberar o grande executável em cada pequena correção, por exemplo.


    Opa Daniel tudo certo!?

     

    Cara me da uma ajuda, estou fazendo a modularização do meu projeto, só que não consigo abrir as telas.

    Se eu seto dentro do form o MDIParent = MDI a tela simplesmente não aparece, se eu comento esta linha e tento abrir a tela aparece fora do MDI.

    Já tentei de tudo e não consegui resolver.

     

    Abraços

    Gustavo

    quarta-feira, 7 de julho de 2010 19:56
  • Olá Gustavo,

    Desculpa demorar tanto a responder... 

    Tenho duas sugestões para o teu problema. Mas realmente, talvez fosse interessante colares algum trecho dos teus códigos para tentarmos ajudá-lo melhor.

    A primeira sugestão é que, além de setares o MDIParent do form que queiras que seja filho do MDI, precisas, também, abri-lo. Mais ou menos assim:

    meuFormFilhoDeMDI.MDIParent = meuMDI
    meuFormFilhoDeMDI.Show()

    A segunda sugestão é que, se já estiveres realizando as operações da primeira sugestão, verifiques se a tua aplicação pode estar com algum problema em armazenar o objeto MDI. A janela MDI que abrires no início do sistema deve ser "guardada" em uma variável global, acessível pelos demais forms do teu sistema, e, caso esses forms estejam em DLL's externas ao MDI, precisas consguir "passar" essa mesma instância do teu MDI para elas, de alguma forma. Se estiveres setando para a propriedade MDIParent uma referência de um form qualquer (que não seja o teu MDI verdadeiro), o form filho pode não estar aparecendo porque está ficando filho de um form que nem está visível no teu sistema (um objeto "perdido", algo assim).

    Bem, esperto ter ajudado mais pouco.

    Sds.,


    Daniel Ethur - Porto Alegre/RS
    domingo, 11 de julho de 2010 04:18
  • Olá Daniel, na empresa em que trabalho a cada correção ou funcionalidade nova temos que gerar um novo executável e instalar novamente no cliente, eu nao conheço essa solução de modularizaçã, como eu faço isso no meu projeto?


    sql server/ASP.NET/C#
    terça-feira, 20 de julho de 2010 20:16
  • Olá Jefter,

     

    seguinte, para realizar a modularização em seu projeto você deve ter um algum conhecimento em arquitetura de software ou melhor conhecer bem o seu requisitos.
    Vou tentar exemplificar:

    Imagine um software de Ponto de Venda-PDV, vou fazer a modularização da seguinte maneira:

    1-Drives das impressoras fiscais.
    2-Drive do TEF.
    3-Camada de Negocios.
    4-Interface do software.
    5-O Exe do software.

    Assim você vai gerar uma dll para cada etapa citada menos a 5 que será o seu executável, deste modo as alterações serão bem mais simples de serem feitas, como exemplo se mudar a legislação das impressoras, seria preciso atualizar somente a etapa 2.


    Espero que eu tenha sido claro.

    terça-feira, 20 de julho de 2010 20:36
  • vamos ver se ey entendi, cada projeto meu é uma dll, se a alteração ocorrer em um unico projeto dentro da minha solução, bastaria substituir as dlls. correto?

    sql server/ASP.NET/C#
    terça-feira, 20 de julho de 2010 20:44
  • Isto Jefter.

     

    Você divide o seu projeto em varias camadas, quando houver alguma alteração em uma camada é só substituir a dll no diretório do seu aplicativo.

     

    Blz....

    terça-feira, 20 de julho de 2010 21:08