Threads Simultâneas
27/10/2010
0
tenho que fazer um carga semanal em uma tabela, como a regra é um pouco complexa eu resolvi criar um robô ao invês de fazer um JOB chamar um PROC.
O robô funciona legal, mas como a quantidade de registros é muito grande, eu gostaria de criar threads para fazer esse insert mais rápido. Tenho cerca de 14 milhões de linhas a serem incluídas.
Alguem pode da alguma idéia de como fazer isso?
Obrigado.
Tiago Melantonio
Posts
27/10/2010
Vinicius Vieira
public class InsercaoBD{Thread trd1;Thread trd2;
privatedelegate void EncapsulaVoid();
private EncapsulaVoid m_StartaThread1;private EncapsulaVoid m_StartaThread2;
Inserir(){ List<Registro> lst = new List<Registros>(); lst = GetRegitros(1000);//Escreva um método que retorne x registros que estão para serem inseridos MarcaRegistro(lst,Processando);//Escreva outro que marca uma lista de registros como processando o método que pega não pode trazer os que estão marcados dessa forma foreach(Regitro rs in lst){ insere(rs);//Um método que grava o registro no banco } MarcaRegistro(lst,Processado);//Muda o status para processado; this.Invoke(m_StartaThread1); this.Invoke(m_StartaThread2); } StartaThreads(){ trd1 = new Thread(Inserir); trd2 = new Thread(Inserir); m_StartaThread1 = new EncapsulaVoid(StartaThread1); m_StartaThread2 = new EncapsulaVoid(StartaThread2); trd1.Start(); trd2.Start(); } StartaThread1(){ if(GetQtdRegistroFaltantes>0){ trd1 = new Thread(Inserir); trd1.Start(); } } StartaThread2(){ if(GetQtdRegistroFaltantes>0){ trd2 = new Thread(Inserir); trd2.Start(); } }
}
27/10/2010
Vinicius Vieira
27/10/2010
Luiz Soares
acho que é melhor jogar um pouco desse processamento pro banco mesmo..pq vai segurar bastante recurso da maquina que estiver esse robo, mas se acha que a maquina aguenta, ainda assim acho que inserir um por um é enfiar uma faca no olho. Melhor processar em lote ai, pode seguir a ideia que o Vinicius ja passou ai so que ao inves de processar os 1000 um por um, pega 1000 gera um lote e manda pro banco de uma vez.
28/10/2010
Vinicius Vieira
Clique aqui para fazer login e interagir na Comunidade :)