ApplyUpdates, melhor maneira de usar...
Amigos do fórum, estou querendo trocar uma idéia com relação ao ApplyUpdates...
com a ajuda da matéria de Profiling da ClubeDelphi Edição 51, que diga-se de passagem, uma excelente matéria, reparei que em muitas rotinas de meus sistemas o principal ´gargalo´ estava em rotinas de loop para gravar dados em tabelas, eu estava dando applyupdates em cada inserção, mudando o applyupdates para o fim do loop (depois de todos os registros gravados na memória) a velocidade da rotina foi muito melhor.
Mas aí em fiquei curioso, até que ponto a rotina ser desse jeito é interessante? A integridade dos dados não ficará comprometida? Ou na verdade essa é a maneira correta de se escrever a rotina?
quem puder dar a sua opinião eu agradeceria...
Exemplo:
antes:
while not Tabela1.EOF do
begin
Tabela2.Insert;
{Atribuindo campos}
Tabela2.Post;
Tabela2.ApplyUpdates(0);
Tabela1.Next;
end;
Depois:
while not Tabela1.EOF do
begin
Tabela2.Insert;
{Atribuindo campos}
Tabela2.Post;
Tabela1.Next;
end;
Tabela2.ApplyUpdates(0);
com a ajuda da matéria de Profiling da ClubeDelphi Edição 51, que diga-se de passagem, uma excelente matéria, reparei que em muitas rotinas de meus sistemas o principal ´gargalo´ estava em rotinas de loop para gravar dados em tabelas, eu estava dando applyupdates em cada inserção, mudando o applyupdates para o fim do loop (depois de todos os registros gravados na memória) a velocidade da rotina foi muito melhor.
Mas aí em fiquei curioso, até que ponto a rotina ser desse jeito é interessante? A integridade dos dados não ficará comprometida? Ou na verdade essa é a maneira correta de se escrever a rotina?
quem puder dar a sua opinião eu agradeceria...
Exemplo:
antes:
while not Tabela1.EOF do
begin
Tabela2.Insert;
{Atribuindo campos}
Tabela2.Post;
Tabela2.ApplyUpdates(0);
Tabela1.Next;
end;
Depois:
while not Tabela1.EOF do
begin
Tabela2.Insert;
{Atribuindo campos}
Tabela2.Post;
Tabela1.Next;
end;
Tabela2.ApplyUpdates(0);
Gilberto Fernandes
Curtidas 0
Respostas
Lucas Silva
17/05/2004
while not Tabela1.EOF do
begin
Tabela2.Insert;
{Atribuindo campos}
Tabela2.Post;
Tabela2.ApplyUpdates(0);
Tabela1.Next;
end; Eu acho melhor este, pois a cada registro inserido você atualiza seu banco.
Com este código a rotina fica bem mais lenta, que no outro.
GOSTEI 0
Gilberto Fernandes
17/05/2004
vlw Lucas...
mas tomara q tenha mais opiniões...
mas tomara q tenha mais opiniões...
GOSTEI 0
Nerdex
17/05/2004
Gilberto... eu não curto esse ´tipo de padrão´, e uso Querys e SQLs para tudo... creio que seja mais rápido... ñ?
GOSTEI 0
Gilberto Fernandes
17/05/2004
NerdeX, eu geralmente utilizo comandos de Insert e Update por SQL... mas tem algumas rotinas q isso não é possível... mas realmente a velocidade é maior nesses casos...
GOSTEI 0
Lucas Silva
17/05/2004
Se você já tem o método ´POST´ na query, eu acho bobagem ficar fazendo a inserção por SQL
GOSTEI 0
Gilberto Fernandes
17/05/2004
Lucas eu quis dizer q algumas rotinas eu uso inserção e alteração por SQL... porém em outras, onde não é possível usar SQL, eu uso o método post...
e como o Nerdex disse, a inserção por SQL é bem mais veloz do q o método de dar o applyupdates...
mas a minha questão é usar o applyupdates em cada inserção ou usá-lo depois de todas as inserções...
e como o Nerdex disse, a inserção por SQL é bem mais veloz do q o método de dar o applyupdates...
mas a minha questão é usar o applyupdates em cada inserção ou usá-lo depois de todas as inserções...
GOSTEI 0
Kotho
17/05/2004
imagine se acabar a energia no meio do processo!!! O ApplyUpdates no final da operação garantiria que, ou todo o processo seria processado, ou nenhum...
GOSTEI 0
Tnaires
17/05/2004
Eu, particularmente, concordo com o Kotho. Por razoes de segurança dos dados armazenados, prefiro aplicar as atualizaçoes depois do laço. Mas a melhor pessoa pra decidir isso e vc, Gilberto.
GOSTEI 0
Gilberto Fernandes
17/05/2004
com relação a queda de energia, as experiências q eu tive com relação ao interbase me levam a crer que quase todas as vezes que uma interrupção abrupta do sistema o banco se corrompe e tenho que restaurar um backup. Então nem faria muita diferença entre as rotinas.
vlw galera
vlw galera
GOSTEI 0