Temos 3 formas de compartilhar informações entre programas. Passagem de parâmetros, compartilhamento(shared) e variáveis\objetos globais. Todas elas nos servem em determinadas situações, eu aprendi e vi testes que o ideal em termos de memória e performance é o uso de shared, que como diz o nome, compartilha uma área de memória e assim não duplica o uso da mesma. No caso de parametros, é utilizada uma nova área que recebe as informações, o que dobra o uso de memória e quando definimos global, o problema é que apenas quando fecharmos a sessão é que deixará a memória livre. Abaixo, programa exemplo das 3 situações. Qualquer dúvida, comente que tentarei responder.
/* temp table como parametro */
DEFINE TEMP-TABLE ttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
repeat:
INSERT ttTeste WITH SIDE-LABELS.
END.
RUN c:\aprenderProgress\utilizaTT.p (INPUT TABLE ttTeste).
/* utilizaTT parametro */
DEFINE TEMP-TABLE ttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
DEFINE INPUT PARAMETER TABLE FOR ttTeste.
FOR EACH ttTeste:
DISP ttTeste.
END.
/* temp table como shared */
DEFINE NEW SHARED TEMP-TABLE shttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
repeat:
INSERT ttTeste WITH SIDE-LABELS.
END.
/* utilizaTT shared */
DEFINE SHARED TEMP-TABLE ttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
FOR EACH ttTeste:
DISP ttTeste.
END.
RUN c:\aprenderProgress\utilizaTT.p (INPUT TABLE ttTeste).
/* temp table global */
DEFINE NEW GLOBAL SHARED TEMP-TABLE glttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
repeat:
INSERT ttTeste WITH SIDE-LABELS.
END.
RUN c:\aprenderProgress\utilizaTT.p (INPUT TABLE ttTeste).
/* utilizaTT global */
DEFINE NEW GLOBAL SHARED TEMP-TABLE ttTeste
FIELD nome AS CHAR
FIeld endereco AS CHAR FORMAT "x(50)"
FIELD cidade AS CHAR.
FOR EACH ttTeste:
DISP ttTeste.
END.
Um comentário:
no programa que vai receber a tt global shared, precisa ser definoda como NEW GLOBAL ou só DEF GLOBAL SHARED?
Postar um comentário