Classe com métodos estáticos que permitem ligar e desligar o cache de query do DBAccess.
O cache é mantido na DBAPI e consome uma quantidade de memória proporcional ao retorno da query.
Caso EXATAMENTE a mesma query seja executada, o retorno será diretamente do cache da DBAPI, tendo assim uma performance muito superior a uma nova consulta no banco de dados.
É necessário sempre ligar o cache antes de executar a query e depois de executada desligar o mesmo.
Descrição:
Liga o cache para as queries
Sintaxe:
FwQueryCache():TurnOnCache( <cLifeTime> , <cTimeOut> )
Parâmetros
| Nome | Tipo | Descrição | Obrigatório | Referência |
|---|---|---|---|---|
| cLifeTime | Caractere | Define se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundos | X | |
| cTimeOut | Caractere | Define se a query vai ficar no cache do DBAccess e qual o timeout dela em segundos | X |
Descrição:
Desliga o cache para as queries
Sintaxe:
FwQueryCache():TurnOffCache()
#include "protheus.ch"
#define C_GRUPO "99"
#define C_FILIAL "01"
//-------------------------------------------------------------------
/*{Protheus.doc} cacheQry
Exemplo de utilização da classe FWQueryCache, classe responsável
por criar um cache na DBAPI da query aberta
@author Daniel Mendes
@since 28/08/2020
@version 1.0
*/
//-------------------------------------------------------------------
user function cacheQry()
local cAlias as char
local cQuery as char
RpcSetEnv(C_GRUPO, C_FILIAL)
cAlias := GetNextAlias()
cQuery := "SELECT ED_CODIGO FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' '"
FwQueryCache():TurnOnCache("120", "60")
DBUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), cAlias, .T., .T.)
FwQueryCache():TurnOffCache()
while !(cAlias)->(Eof())
ConOut((cAlias)->ED_CODIGO)
(cAlias)->(DBSkip())
enddo
(cAlias)->(DBCloseArea())
RpcClearEnv()
return |
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after {
background: #FF9900; !important
}
.menu-item.active-tab {
border-bottom: none !important;
}
</style>
|