Dúvida sobre passar recordset ADO por funções

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida sobre passar recordset ADO por funções

Mensagem por JoséQuintas »

Estou com uma dúvida sobre passar o recordset ADO por funções.

Considerando:

oTemporario := conexão:Execute( "SELECT ...." )

O que seria melhor?

Função( oTemporario )

ou

Função( @oTemporario )

Teoricamente, passando o ponteiro economiza memória, mas..... sinceramente não sei.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Dúvida sobre passar recordset ADO por funções

Mensagem por Fernando queiroz »

JoséQuintas escreveu:Estou com uma dúvida sobre passar o recordset ADO por funções.

Considerando:

oTemporario := conexão:Execute( "SELECT ...." )

O que seria melhor?

Função( oTemporario )

ou

Função( @oTemporario )

Teoricamente, passando o ponteiro economiza memória, mas..... sinceramente não sei.
tenho usado bastante quando quero modificar o conteúdo do parâmetro passado, se não for alterar passo sem o @, não sabia que economizava memoria
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dúvida sobre passar recordset ADO por funções

Mensagem por JoséQuintas »

Fernando queiroz escreveu:tenho usado bastante quando quero modificar o conteúdo do parâmetro passado, se não for alterar passo sem o @, não sabia que economizava memoria
Passando por referência está passando o endereço da mesma variável, o chamado pointer/ponteiro.
Desse jeito a função usa a mesma variável.
SEM referência, é criada uma cópia da variável com o mesmo conteúdo.

É que geralmente trabalhamos com variáveis de conteúdo pequeno, e nem importa muito economizar memória.
Difícil, mas não impossível, poderia ser a geração de um SPED para o governo:
Imagine uma variável de 500MB, passando por uma função: vai ser 500MB da original, 500MB na cópia pra função, e 500MB pro retorno. 1.5GB total.
Por referência, fica nos 500MB.
Dependendo da memória do computador, a rotina poderia não funcionar, ou o Windows ficar sobrecarregado.

Acaba sendo interessante lembrar disso, porque temos todo tipo de situação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder