quinta-feira, 20 de janeiro de 2011

Dicas Progress - compartilhando dados(temp-table)

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:

Unknown disse...

no programa que vai receber a tt global shared, precisa ser definoda como NEW GLOBAL ou só DEF GLOBAL SHARED?