EditMask Consumindo Memória
Saudações!
No sistema, há uma tela que possui um dbgrid, onde estão sendo visualizadas 3 colunas:
- Sim (Campo: AT_TMP_SIM)
- Item (Campo: CF_ITEM_NOM)
- Descrição (Campo: AT_CLIN_TEX)
No campo CF_ITEM_NOM, há 3 itens que dizem respeito a data:
- Data de Solicitação
- Data de Cancelamento
- Data de Resolução
Quando o usuário seleciona um item, na coluna ao lado (Descrição), ele digita um texto, que pode ser um número, um texto comum ou uma data. A idéia é se o item for uma data (somente neste caso), conforme mencionado anteriomente, automaticamente a célula a descrição deverá ser mascarada, para facilitar a digitação. Agora, se não for data, a descrição não é mascarada.
Vale a pena ressaltar que há uma coluna (CF_OR_ITEM_TIP_DADO) que identifica o tipo da dado armazenado no campo da descrição.
Para isso, cheguei à seguinte solução:
[Evento ondrawcolumncell]
...
if gdFocused in State then
begin
if dmAtendimento.cdsAten_TempCF_OR_ITEM_TIP_DADO.Value = ´D´ then
dmAtendimento.cdsAten_TempAT_CLIN_TEX.EditMask := ´99/99/9999;1;_´
else
dmAtendimento.cdsAten_TempAT_CLIN_TEX.EditMask := ´´;
end;
...
[Evento ongettext do campo AT_CLIN_TEX]
Text := Sender.AsString;
if cdsAten_TempCF_OR_ITEM_TIP_DADO.AsString = ´D´ then
Text := FormatMaskText(´99/99/9999;1;_´, Sender.AsString);
Num determinado momento, percebi no gerenciador de tarefas do windows um consumo muito grande (chegando a 100¬) de memória, principalmente em computadores pentium III, por exemplo. Depois de um tempo, descobri que quando o foco está em uma célula da coluna da descrição, o consumo aumentava, se eu selecionasse uma outra coluna ou fechasse a tela e abrisse novamente, o consumo baixava. A partir do momento em que comentei o 1º código (do evento ondrawcolumncell), não houve um consumo exagerado de memória. Concluindo, por algum motivo a rotina está gerando o alto consumo (usando editmask). O sistema funciona, mas tem esse detalhe que é importantíssimo.
Eu tentei várias alternativas, mas não obtive êxito. Gostaria de saber qual a opinião de vcs sobre este problema e caso tenham uma outra solução (mais adequada), por favor postem, e ficarei muito agradecido.
Abraços,
No sistema, há uma tela que possui um dbgrid, onde estão sendo visualizadas 3 colunas:
- Sim (Campo: AT_TMP_SIM)
- Item (Campo: CF_ITEM_NOM)
- Descrição (Campo: AT_CLIN_TEX)
No campo CF_ITEM_NOM, há 3 itens que dizem respeito a data:
- Data de Solicitação
- Data de Cancelamento
- Data de Resolução
Quando o usuário seleciona um item, na coluna ao lado (Descrição), ele digita um texto, que pode ser um número, um texto comum ou uma data. A idéia é se o item for uma data (somente neste caso), conforme mencionado anteriomente, automaticamente a célula a descrição deverá ser mascarada, para facilitar a digitação. Agora, se não for data, a descrição não é mascarada.
Vale a pena ressaltar que há uma coluna (CF_OR_ITEM_TIP_DADO) que identifica o tipo da dado armazenado no campo da descrição.
Para isso, cheguei à seguinte solução:
[Evento ondrawcolumncell]
...
if gdFocused in State then
begin
if dmAtendimento.cdsAten_TempCF_OR_ITEM_TIP_DADO.Value = ´D´ then
dmAtendimento.cdsAten_TempAT_CLIN_TEX.EditMask := ´99/99/9999;1;_´
else
dmAtendimento.cdsAten_TempAT_CLIN_TEX.EditMask := ´´;
end;
...
[Evento ongettext do campo AT_CLIN_TEX]
Text := Sender.AsString;
if cdsAten_TempCF_OR_ITEM_TIP_DADO.AsString = ´D´ then
Text := FormatMaskText(´99/99/9999;1;_´, Sender.AsString);
Num determinado momento, percebi no gerenciador de tarefas do windows um consumo muito grande (chegando a 100¬) de memória, principalmente em computadores pentium III, por exemplo. Depois de um tempo, descobri que quando o foco está em uma célula da coluna da descrição, o consumo aumentava, se eu selecionasse uma outra coluna ou fechasse a tela e abrisse novamente, o consumo baixava. A partir do momento em que comentei o 1º código (do evento ondrawcolumncell), não houve um consumo exagerado de memória. Concluindo, por algum motivo a rotina está gerando o alto consumo (usando editmask). O sistema funciona, mas tem esse detalhe que é importantíssimo.
Eu tentei várias alternativas, mas não obtive êxito. Gostaria de saber qual a opinião de vcs sobre este problema e caso tenham uma outra solução (mais adequada), por favor postem, e ficarei muito agradecido.
Abraços,
Roger1976
Curtidas 0
Respostas
Roger1976
01/10/2008
Ratificando, aumenta o processamento (gráfico CPU usage do gerenciador do windows, e não memória).
GOSTEI 0