+4 votos
128 visitas

Sabe-se que independente do escopo, uma variável VB tem o tempo de vída da procedure que a instacia. Mas como no sistema Benner o VB é executado internamente e acredito que deva ter algumas particularidades quero saber quanto ao tempo de vida de uma variável "Objeto" que instacio numa macro. 

Conversando com quem trabalha a mais tempo, me mostraram que a muito vem-se utilizando o comando :

Set obj = Nothing

Uma linha acima do End Sub, ou seja no fim da procedure, com o intuito de limpar a variável. Ninguém soube me dar certeza se este comando é realmente necessário e o pessoal utiliza apenas por garantia.

Será que devemos continuar fazendo isto, ou o VB me garante que a variável será destruida ao fim da macro?

por (21 pontos) | 128 visitas

1 Resposta

+5 votos
Melhor resposta

É bem comum um evento de macro criar apenas um objeto BPesquisa e liberar ele ao fim, uma linha antes do End Sub. Considernado que o VB libera para você, num primeiro momento, pode parecer um código desnecessário e repetitivo. Mas caso ocorra um problema na liberação do objeto, você vai saber que o erro ocorreu na linha Set obj = Nothing. Ou seja, vai ficar claro que o problema é ali.

Deixar para o contador de referências do VB liberar o objeto no End Sub, pode ficar dificil de diagnostícar caso tenha algum bug no destrutor do objeto (que geralmente é implementado em Delphi ou C#),

Além disso o ideal é você liberar os objetos explicitamente se não for mais utilizá-los. Imagine uma macro onde você cria vários objetos durante sua execução. O ideal é que você os libere assim que terminar de utilizá-los, evitando desperdício de memória. Algumas macros são pequenas e talvez isso pareca uma preocupação tola. Mas com o tempo elas crescem (manutenção, implementações, etc) e acredito que adotando esta prática você garante uma vida mais tranquila no futuro.

 

 

por (865 pontos)
selecionada por
Certo, se é tão importante liberar os objetos, não seria o caso de liberar variáveis do tipo inteiro, string, ... também??
Essas você não precisa liberar, nem mesmo há uma forma de fazer isso. No VB esses tipos não são objetos. Em resumo, tudo o que você utiliza a palavra reservada "Set", é um objeto e deveria ser liberado com Set obj = Nothing se não for mais utilizado.

Perguntas relacionadas

0 votos
1 resposta
perguntado 23 Jul, 2015 por Anderson Roberto (30 pontos) | 87 visitas
+5 votos
1 resposta
+2 votos
2 respostas
perguntado 17 Jul, 2015 por matheus.silva (120 pontos) | 79 visitas
+7 votos
1 resposta
perguntado 16 Out, 2014 por edvaldo.gomes (173 pontos) | 106 visitas
+8 votos
1 resposta
perguntado 9 Mai, 2014 por paulo.silva (865 pontos) | 155 visitas
Melhores Apr 2026
  1. CeceliaWysel

    5 Pontos

  2. VernonSchaw

    5 Pontos

  3. MargieOsterh

    5 Pontos

200 pontos
Melhores 2026 Apr 06 - 12
  1. danilo.pereira

    96 Pontos

  2. danilo.pereira

    96 Pontos

  3. danilo.pereira

    96 Pontos

  4. willian.metalsystem

    69 Pontos

  5. henrique.muller

    62 Pontos

  6. luciano.fronza

    61 Pontos

  7. luciano.fronza

    61 Pontos

  8. luciano.fronza

    61 Pontos

  9. diuari.molinari

    52 Pontos

  10. diuari.molinari

    51 Pontos

518 perguntas
567 respostas
389 comentários
772 usuários