A função ShowInfoSmartHeap tem como objetivo auxiliar a verificação de aumento, acumulo, ou simplesmente para um gerenciamento de memória para o programador checar em determinada "instância" do seu programa como esta os contadores de memória através do smartheap.
Essa função irá exibir todas as informações de alocação em todas as threads, logo tem como objetivo apenas a caráter de estudo, e não deve ser usado em um ambiente de produção, pois as informações serão distorcidas.
As informações são compartilhadas em todas as threads, então para que as informações sejam coerentes, deve-se observar o uso penas de uma thread entre as comparações dos valores retornadas pela função.
Uma das formas de diagnostico é realizar a chamadas de diversas vezes uma determinada rotina, onde esta deve estabilizar o contador de memória após algumas chamadas (o contador de memória mostra a memória que esta em pool), e caso isso não ocorra, pode ser observado no programa um provável problema de leak de execução.
Outra forma de diagnostico é realizar a chamada entre a criação de uma thread e contabilizar o estado da memória antes e depois da execução da thread. Ao finalizar uma thread, se o valor continuar a aumentar e não voltar ao se valor inicial (antes da criação da thread), pode ser observado assim um provável problema de leak.
Sintaxe
call ShowInfoSmartHeap(<param1>,<param2>)
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência | Observações |
---|---|---|---|---|---|
<param1> | Char | Parametro para indicar o ponto onde foi "acionado" a função para o programador | N | N | |
<param2> | Array bidimensional | Array de duas dimensões, onde cada elemento contem outro array com duas posições: Kilobytes, Count. | N | S | Se observado no conout da função no log, é a mesma informação que é listada em cada linha de pool: Ex: pooltString ... 143.91 kB. Count 731 |
Retorno
Nome | Tipo | Descrição | Observações |
---|---|---|---|
Observações
Essa função só esta disponível em builds superiores ao build 7.00.131227A do dia 11/11/2015. Só funciona em builds release.
Exemplos
Exemplo
database logix main DEFINE infos ARRAY[50] OF RECORD info1 INTEGER, info2 INTEGER END RECORD define texto varchar(100) define i smallint call ShowInfoSmartHeap("inicio",infos) call conout("Informacao relevante: " || infos[1].info1 || " kb , Count " || infos[1].info2 ) call conout("Informacao relevante: " || infos[2].info1 || " kb , Count " || infos[2].info2 ) call conout("Informacao relevante: " || infos[3].info1 || " kb , Count " || infos[3].info2 ) call conout("FIZ UM CONOUT SIMPLES.. QUAL SERIA O CONSUMO DO SMARTHEAP?") call ShowInfoSmartHeap("Antes leitura do Cursor: Programa 1", infos) call conout("Informacao relevante: " || infos[3].info1 || " kb , Count " || infos[3].info2 ) call teste_4gl_showinfosmartheap01() call ShowInfoSmartHeap("Apos leitura do Cursor",infos) for i = 1 to 10 let texto = "Teste de repeticoes: " || i call teste_4gl_showinfosmartheap02() call ShowInfoSmartHeap(texto,infos) end for end main FUNCTION teste_4gl_showinfosmartheap01() define a char(50) define j smallint declare cursor1 cursor for SELECT COD_CLIENTE FROM CLIENTES foreach cursor1 into a call conout (a) let j = j+1 if j >100 then exit foreach end if end foreach END FUNCTION function teste_4gl_showinfosmartheap02() run 'fglrun teste_4gl_showinfosmartheap01.4gl' end function
Veja também
ShowInfoSmartHeap - ADVPL