Adapter com SQLite

.NET

18/05/2012

Estou desenvolvendo no ambiente DotNet, com c# e utlizando Datasets Tipados para realizar o processo de inserção em uma base de dados SQLite, tenho 10000 registros, esta levando um tempo de 10 minutos para realizar toda inserção, esta muito lento, como faço para otimizar e acelerar esse processo ?

if (dtBens.Count > 0)
{
if (pBensTableAdapter.Update(dtBens) <= 0)
return false;
}
return true;

Obrigado.
Inovação Ltda

Inovação Ltda

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

18/05/2012

Nunca precisei fazer isso, mas será que se você filtrar seu dataset antes de inserir um novo registro não melhoraria um pouco? Por exemplo, selecionar apenas um registro ou nenhum (SELECT TOP 0...).
GOSTEI 0
Inovação Ltda

Inovação Ltda

18/05/2012

Como assim, não entendi Joel.

Agradeço a atenção.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/05/2012

Seu dataset possui vários registros, certo? Por exemplo, você faz um SELECT * FROM TABELA e depois insere um novo registro. Eu acredito que o dataset seja totalmente atualizado, logo, se você tiver poucos itens no dataset, esta atualização será pequena. Com base nesse pensamento eu te sugerir filtrar o dataset para que, no momento do insert, só haja um registro.

Bem, como te falei, nunca usei isso, é teoria mesmo.
GOSTEI 0
Inovação Ltda

Inovação Ltda

18/05/2012

Certo, joel, so que no meu caso tenho um Datatable contendo 10000 mil registros e insiro todos de uma vez utilizando o Update do Adapter, pois ja alimentei este datatable que será enviado.

Não consegui imaginar essa sugestão neste cenario.

Obrigado.
GOSTEI 0
Fabio Rosa

Fabio Rosa

18/05/2012

Uma perguntinha...

Você precisa inserir todos os 10000 registros de uma vez para o banco? Será que se quebrar em blocos menores de registros não ficaria mais rápido?

Só uma sugestão...

Att.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/05/2012

Rapaz, realmente nesse caso a minha dica não se aplica. Porém, repito a pergunta do colega acima: é realmente necessário inserir os 10000 registros de uma vez? Aí fica complicado pra qualquer banco que seja, né? Considere inserir de outra forma, faça testes pra ver qual é a melhor saída (executar instruções SQL de insert, usar Entity Framework, sei lá).
GOSTEI 0
Inovação Ltda

Inovação Ltda

18/05/2012

Boa tarde.

Ja tentei de varias maneiras, inserindo 1 por 1, e inserindo todos de uma vez, 10000 não é uma quantidade alta para

inserção, não entendo porque é tão lento, no delphi dura menos de 10 segundos.

O resultado individual e total é o mesmo, varios minutos.

Neste cenario não posso utilizar entity.

Obrigado.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/05/2012

Já tentou executar uma instrução SQL de insert a partir de outro objeto? Um SqlCommand, por exemplo.
GOSTEI 0
Inovação Ltda

Inovação Ltda

18/05/2012

Bom dia, sim, ja tentei, so para terem ideia, fiz um teste usando O SQLite e SQL CE, para inserir 10000 mil registros no Lite, demora 15 minutos, no CE demora 0,88 segundos, o problema com certeza esta no SQLite, alguma configuração,versão ou outro processo que esta barrando a agilidade.

Obrigado.
GOSTEI 0
POSTAR