DESCARREGAR MEMORIA NO UNLOAD

USUARIO.EXCLUIDOS 04/05/2005 09:41:27
#81537
Amigos,

Sei que ando sumido, mas é por uma boa causa (pelo menos pra mim ).

Há um mês, instalei meu pograminha de trà¢mite de processos aqui na prefeitura. Bom, no começo ele era só pro meu Departamento, mas com minha incrível capacidade de prever o futuro, já o deixei preparado pra ser usado pelos demais setores (afinal, o pograminha oficial é uma meleca). O truque é simples: quando o usuário digita sua senha, o pograminha identifica o setor ao qual ele pertence e só puxa os processos que são do setor dele. Aí ele pode manipulá-los à  vontade, e se quiser saber sobre um processo que esteja em outro lugar, o pograminha permite a pesquisa no BD e mostra onde ele está, e etc e tal.

Ontem a chefe do Protocolo me procurou e disse que, se o treco aguentar uma quantidade maciça de processos pra manipular, o Tijolão (sim, é esse o nome do pograminha; e a história é meio longa) deve ser adotado pela prefeitura toda.

Aí vem o pobrema: o Tijolão carrega uma treeview com os processos do setor. Onde trabalho, a quantidade de processos em circulação é respeitável (estamos agora com 11000 processos na árvore) e acho que só o Jurídico nos faz frente quanto à  "população flutuante" de processos. Resolvi fazer uma simulação com 55000 processos e o Tijolão se portou muito bem, mas leva muuuuito tempo pra descarregar a árvore da memória, o que pode virar uma chateação.

Agora, a pergunta: tem método mais eficiente do que o unload do form pra descarregar a treeview? Dá pra "matar" a árvore de uma paulada só, sem o sistema ir descarregando nó por nó?
LCSD 04/05/2005 10:02:08
#81542
MaxMummy

Prezado Max

A rigor o Clear deveria dar conta do Recado.

treemenu.Nodes.Clear 


Teste e veja se funciona.

Note que 11.000 processos em um TreeView podem demandar um bom tempo de preenchimento em máquinas antigas, não sei como é que anda o tempo de preenchimento do teu TIJOLÃO.

Até Breve
[s50]
USUARIO.EXCLUIDOS 04/05/2005 11:26:13
#81560
Kpella,

Já testei o clear na rotina do unload, mas o tempo foi praticamente o mesmo.

O tempo de carregamento é sensivelmente menor do que o de descarregamento. Aos interessados já aviso que só instalo em máquinas com 1.2GHz ou mais (se bem que roda bem em casa, com meu PIII 750), de modo que o usuário nem vê a árvore ser carregada. Na hora de fechar, leva-se alguns segundos (entre 3 e 10, conforme a máquina e o tamanho da árvore), de modo que aconselho os usuários a deixar o Tijolão aberto.

Mas, pode ser preciosismo meu, não estou gostando dessa demora. Lembremos que o Explorer descarrega a árvore instantaneamente, e ele lida com muito mais nós do que eu. Tem que ter algum truque pra tirar os nós tão rápido da memória.
LCSD 04/05/2005 11:37:56
#81561
Max

Tu já tentou usar o Visible = False?

Em diversos casos há uma grande variação.
[s92]
WEBMASTER 04/05/2005 11:39:42
#81563
Resposta escolhida
Max,


Tenta o seguinte, crie um treeView de trabalho com o nome "treeview_limpa" sem nada dentro, e faz o set para ela no "query_unload" do form. Verifique o tempo e vê se vale a pena.


set TreeView = treeview_limpa


Desculpa a gambiarra, mas não tive uma outra idéia.



Até mais,
WEBMASTER 04/05/2005 12:03:46
#81567
Ou tente isso também no query_unload,


Set Form1 = Nothing
USUARIO.EXCLUIDOS 04/05/2005 13:53:56
#81588
Meu leve e esbelto amigo:

Não consigo imaginar que a demora no trabalho de descarga seja causado pelo Treeview em sí mesmo. Já verificou se o problema não está relacionado á outros componentes, como Recordset e tal?

De qualquer forma, independente do nº de nodes, a rotina abaixo "acaba" com um Treeview quase de forma instantà¢nea (eu tive a pachorra de testar exaustivamente, alterando todas as variáveis possíveis no código).
...
With TreeView1
.Visible = False
.Nodes.Clear
End With
...

Uma variante (levei quase dois dias para chegar nessa variante, fiquei exaurido com as implicações da metodologia adotada) é:
...
Dim o As Node
With TreeView1
.Visible = False
For Each o In .Nodes
.Nodes.Remove o.Index
Next
End With
...

Agora, de forma mais séria (desculpe a brincadeira):

Caso o nº de nós de um TreeView seja muito elevado, ele realmente é bem mais lento do que outros objetos de visualização de massas de dados. Seria mais interessante substituir por uma grade de dados, mesmo um MSHFlexgrid. Não apenas o desempenho do Form será melhor, mas também a manutenção será mais fácil.
USUARIO.EXCLUIDOS 04/05/2005 13:56:14
#81589
Progressos.

Coloquei o visible do form = false no queryunload (ótima participação dos colegas KPella e Leopoldo; o visible no form_unload não resolve; tem que ser no queryunload). Pelo menos o processo de descarregamento não fica visível para o usuário. Como eu não proibi novas instà¢ncias do Tijolão na máquina, então não há problema do usuário reabri-lo imediatamente após fechá-lo.

Mas a tarefa continua aberta. Me lembro vagamente que o sistema de arquivos é carregado na inicialização do Windows (ou antes), então intuo que a árvore que a gente carrega no Explorer já está na memória, e quando o fechamos, não jogamos a árvore fora, ficando essa tarefa para o momento em que desligamos a máquina. Seria esse o segredo do Explorer?
USUARIO.EXCLUIDOS 04/05/2005 14:47:53
#81597
Professor,

Não me vejo como "leve" e "esbelto".
Um "Lindão" já basta.

Pelos testes, a culpa é dele mesmo. O clear "mata" a árvore, mas congela a tela, e no fim, leva o mesmo tempo que levaria pra matá-la usando o unload do form. Pro usuário, é muito melhor ver a tela fechar de forma instantà¢nea. Dá impressão de que o aplicativo é "profissional", apesar do processo de fechamento continuar em 2º plano. Bom, isso é o que deu aqui até agora.

A adoção do treeview foi por causa da interface com o usuário - que ficou bem intuitiva, graças ao Explorer. Faz parte da minha estratégia para propagar o uso do Tijolão: a turma adora arrastar e soltar processo pra lá e pra cá. Todo mundo vira criança jogando videogame e acaba vendo as outras vantagens do meu pograminha. Tem gente que não quer ver meu concorrente nem pintado de ouro
Tópico encerrado , respostas não são mais permitidas