[delphi-br] [ RECORD LIMPAR MEMORIA]
Pessoal estou utilizando a extrutura a abaixo , class com varios records, e nao sei como fazer para limpar a memoria corretamente apos utilizar. Record precisa limpar a memoria? Tnota = class(TObject) public codEmpresa : String; emitente : Tipo_dados_emitente; destinatario : Tipo_dados_destinatario; Produto : array of Tipo_dados_produto ; end; Tipo_dados_produto = record nItem : String; infAdProd: String; cProd : String; cEAN: String; ICMS: Tipo_ICMS; PIS : Tipo_dados_ProdutoPISaliquota; end ; Tipo_ICMS = record CST00: Tipo_dados_CST00 ; CST10: Tipo_dados_CST10 ; CST20: Tipo_dados_CST20 ; CST30: Tipo_dados_CST30 ; CST40: Tipo_dados_CST40 ; CST51: Tipo_dados_CST51 ; CST60: Tipo_dados_CST60 ; CST70: Tipo_dados_CST70 ; CST90: Tipo_dados_CST90 ; end; Tipo_dados_CST20 = Record Orig : String; CST : String; modBC : String; pRedBC : String; vBC : String; pICMS : String; vICMS : String; end; //... Para utilizar u faco desta maneira var nota : Tnota; begin nota := nil; nota:= Tnota.Create; nota.codEmpresa := vetorLinha[1]; ... ... inc(contprod); SetLength(nota.Produto,contprod); nota.Produto[contprod-1].nItem := vetorLinha[1] ; nota.Produto[contprod-1].infAdProd:= vetorLinha[2] ; CONTINUE;; .. ... e para limpar faco assim nota.free; nota:= nil; Esta correto desta maneira ??? esvazia toda a memororia ?? Socorro !! Att. MArcio - Blumenau
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Quem entende muito disso é o João Morais, mas não apareceu mais na lista :) José Mário Silva Guedes escreveu: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; .
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Dá uma olhada nesse link: http://www.planetadelphi.com.br/dica/4652/usando-tlist-e-record-como-array 2009/7/6 EmbarcaDelphi embarcadel...@yahoo.com.br Quem entende muito disso é o João Morais, mas não apareceu mais na lista :) José Mário Silva Guedes escreveu: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; . [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Aqui esta usando ponteiros nao e´ bem isso. At 13:18 6/7/2009 -0300, you wrote: Dá uma olhada nesse link: http://www.planetadelphi.com.br/dica/4652/usando-tlist-e-record-como-arrayhttp://www.planetadelphi.com.br/dica/4652/usando-tlist-e-record-como-array 2009/7/6 EmbarcaDelphi mailto:embarcadelphi%40yahoo.com.brembarcadel...@yahoo.com.br Quem entende muito disso é o João Morais, mas não apareceu mais na lista :) José Mário Silva Guedes escreveu: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; . [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
a classe esta sendo destruida, os registros sao destruidos quando vc destroi o form q o tem declarado.. acho q eh isso 2009/7/6 Marcio mar...@sulfabril.com.br Aqui esta usando ponteiros nao e´ bem isso. At 13:18 6/7/2009 -0300, you wrote: Dá uma olhada nesse link: http://www.planetadelphi.com.br/dica/4652/usando-tlist-e-record-como-array http://www.planetadelphi.com.br/dica/4652/usando-tlist-e-record-como-array 2009/7/6 EmbarcaDelphi mailto:embarcadelphi%40yahoo.com.br embarcadelphi%2540yahoo.com.br embarcadel...@yahoo.com.br embarcadelphi%40yahoo.com.br Quem entende muito disso é o João Morais, mas não apareceu mais na lista :) José Mário Silva Guedes escreveu: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; . [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- Leandro, MuTukA [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Vc pode chamar o método Free e depois Nil ou tambem usar a procedure FreeAndNil( objeto ). []'s Ricardo. 1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS. 2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor compreendida. 3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante! --- Em seg, 6/7/09, José Mário Silva Guedes jmariogue...@gmail.com escreveu: De: José Mário Silva Guedes jmariogue...@gmail.com Assunto: Re: [delphi-br] [ RECORD LIMPAR MEMORIA] Para: delphi-br@yahoogrupos.com.br Data: Segunda-feira, 6 de Julho de 2009, 10:24 Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; [As partes desta mensagem que não continham texto foram removidas] Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
2009/7/6 marciosulfabril mar...@sulfabril.com.br: Pessoal estou utilizando a extrutura a abaixo , class com varios records, e nao sei como fazer para limpar a memoria corretamente apos utilizar. Record precisa limpar a memoria? Não. Record é uma estrutura estática que o compilador aloca e o compilador desaloca. Você só precisa desalocar memória que você aloca manualmente, com exceção de strings e arrays dinâmicos, cuja limpeza também é feita pelo compilador. Detalhes abaixo. Tnota = class(TObject) public codEmpresa : String; emitente : Tipo_dados_emitente; destinatario : Tipo_dados_destinatario; Produto : array of Tipo_dados_produto ; end; Tipo_dados_produto = record nItem : String; infAdProd: String; cProd : String; cEAN : String; ICMS : Tipo_ICMS; PIS : Tipo_dados_ProdutoPISaliquota; end ; Tipo_ICMS = record CST00: Tipo_dados_CST00 ; CST10: Tipo_dados_CST10 ; CST20: Tipo_dados_CST20 ; CST30: Tipo_dados_CST30 ; CST40: Tipo_dados_CST40 ; CST51: Tipo_dados_CST51 ; CST60: Tipo_dados_CST60 ; CST70: Tipo_dados_CST70 ; CST90: Tipo_dados_CST90 ; end; Tipo_dados_CST20 = Record Orig : String; CST : String; modBC : String; pRedBC : String; vBC : String; pICMS : String; vICMS : String; end; //... Para utilizar u faco desta maneira var nota : Tnota; begin nota := nil; Você não precisa disso acima, e o compilador certamente emite um hint nesse código. nota:= Tnota.Create; nota.codEmpresa := vetorLinha[1]; ... ... inc(contprod); SetLength(nota.Produto,contprod); Array dinâmico acima. Os itens desse array será removido pelo compilador assim que ele sair de contexto. Agora atenção, se algum item desse array apontar para algum objeto, você tem que remover o objeto manualmente. Se apontar para uma string ou outro array dinâmico, você não precisa se preocupar. nota.Produto[contprod-1].nItem := vetorLinha[1] ; nota.Produto[contprod-1].infAdProd := vetorLinha[2] ; CONTINUE;; .. ... e para limpar faco assim nota.free; nota:= nil; FreeAndNil(nota) é mais seguro que as duas linhas acima. Esta correto desta maneira ??? esvazia toda a memororia ?? Use FastMM, ele é seu amigo. Joao Morais
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
2009/7/6 José Mário Silva Guedes jmariogue...@gmail.com: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; Não precisa. Quando há alguma estrutura em que esse apontamento faz diferença (array dinâmico, interface e ansi string), o próprio destrutor da classe associa nil ao ponteiro por você. Joao Morais
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
On Mon, Jul 6, 2009 at 11:13 AM, EmbarcaDelphiembarcadel...@yahoo.com.br wrote: Quem entende muito disso é o João Morais, mas não apareceu mais na lista :) Não sou eu quem não apareci mais na lista, é a lista que não recebe mais mensagens sobre a linguagem pascal, object pascal ou delphi. Joao Morais
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Em 6/7/2009 20:20, Joao Morais escreveu: 2009/7/6 José Mário Silva Guedes jmariogue...@gmail.com mailto:jmarioguedes%40gmail.com: Eu tenho dúvidas quanto a isto também, e por desencargo, eu rescrevo o Destructor da classe, para anular os arrays: nota.Produto := nil; Não precisa. Quando há alguma estrutura em que esse apontamento faz diferença (array dinâmico, interface e ansi string), o próprio destrutor da classe associa nil ao ponteiro por você. Joao Morais Aproveitando o gancho nessa thread ... Supondo que tenho dois tipos, TPessoaRecord e TPessoaClass, eu posso usar com um record da seguinte maneira, bem simples ...: --- var ..VPessoaRecord: TPessoaRecord; begin ..VPessoaRecord.Nome := 'Fulano de tal'; ..ShowMessage(VPessoaRecord.Nome); end; --- ... não usei create/free, agora com uma classe ... --- var ..VPessoaClass: TPessoaClass; begin ..VPessoaClass := TPessoaClass.Create; ..try VPessoaClass.Nome := 'Fulano de tal'; ShowMessage(VPessoaClass.Nome); ..finally VPessoaClass.Free; ..end; end; --- ... com class eu posso usar inúmeros recursos do object pascal (herança, abstração, polimorfismo ...), então o class para TPessoa seria o mais indicado, já que tal objeto poderia conter várias propriedades, mas tem alguns casos que o objeto é bem simples, ex: TEndereco, que teria poucos campos (Rua, Numero, UF...), então seria correto eu usar o record para esse caso? -- []'s, Silvio Clécio --- Linux User: #481900 Gmail, GTalk: silviop...@gmail.com E-mail, Y! Messenger: silviop...@yahoo.com.br BlogSite: http://silvioprog.blogspot.com/ BlogSpot: http://silvioclecio.blogspot.com/ VirtualDriver: http://silvioprog.4shared.com/ °oO| Seja livre, use Linux! |Oo°
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
Em 6/7/2009 09:01, marciosulfabril escreveu: Pessoal estou utilizando a extrutura a abaixo , class com varios records, e nao sei como fazer para limpar a memoria corretamente apos utilizar. Pitacos... Caso o teu Delphi não tenha o FastMM nativo (ReportMemoryLeaksOnShutdown) você pode utilizar um ótimo gerenciador de memória: Link oficial - [http://sourceforge.net/projects/fastmm/]. Link com um demo em pt-br - [http://sites.google.com/site/silvioprogbs/downloads/FastMM4.zip?attredirects=0]. ps. Veja as dicas dos brothers e também visite esse blog: [http://blog.joaomorais.com.br/], nele tem *muita* informação sobre Object Pascal, em especial a postagem: Objetos com contagem de referência. Boa sorte Marcio. -- []'s, Silvio Clécio --- Linux User: #481900 Gmail, GTalk: silviop...@gmail.com E-mail, Y! Messenger: silviop...@yahoo.com.br BlogSite: http://silvioprog.blogspot.com/ BlogSpot: http://silvioclecio.blogspot.com/ VirtualDriver: http://silvioprog.4shared.com/ °oO| Seja livre, use Linux! |Oo°
Re: [delphi-br] [ RECORD LIMPAR MEMORIA]
2009/7/6 Silvio Clecio silviop...@yahoo.com.br: Em 6/7/2009 09:01, marciosulfabril escreveu: Pessoal estou utilizando a extrutura a abaixo , class com varios records, e nao sei como fazer para limpar a memoria corretamente apos utilizar. Pitacos... Caso o teu Delphi não tenha o FastMM nativo (ReportMemoryLeaksOnShutdown) você pode utilizar um ótimo gerenciador de memória: Link oficial - [http://sourceforge.net/projects/fastmm/]. Link com um demo em pt-br - [http://sites.google.com/site/silvioprogbs/downloads/FastMM4.zip?attredirects=0]. Pra quem não sabe, o gerenciador de memória do D2006 em diante é o próprio FastMM, que foi empacotado pela então Borland. Joao Morais