NESTE CASO,DIVIDIR RESOLVE?

MARCOS 25/04/2013 14:03:40
#422487
Boa tarde,Pessoal!
Estou com um problema simples,mais inédito.ao menos
para mim é a primeira vez.

Obs: Visual Studio 2010 (Windows XP)


O problema:

Por motivos diversos,tais como falta de tempo,pressão do chefe,etc...
eu cometi um erro classico. Digo erro, pois eu já havia lido isto em
algum lugar e não dei a devida importância.

[Ô]NUNCA PRESUMA QUE SE SEU SISTEMA FUNCIONA PERFEITO.O MESMO OCORRERÁ
QUANDO FOR SUBMETIDO A UMA CARGA [Ô]REAL[Ô] DOS DADOS[Ô]

Pois bem.Meu sistema ao ser testado com uma BD de [Ô]Teste[Ô], estava excelente. executando um
Algoritmo complexo, com acessos a BD,etc... em 20 minutos. Quando coloquei uma carga de dados real,
passou a precisar de 5 Horas!!!!!

A Idéia que tive:

Agora que já fiz besteira.Pensei numa alternativa:

O software na verdade tem de rodar 4 algoritmos em sequência.Um de cada vez. Cada um
dos algoritmos é demorado,dai o tempo longo para terminar. Pensei então:

E se eu criar 4 executaveis para que cada um rode os algoritmos em separado????

Pergunta:

Se eu rodar portanto ,ao mesmo tempo 4 executáveis (Na mesma máquina), cada um resolvendo um dos algoritmos, isto me permitirá terminar mais rápido???????

Ou levarei o mesmo tempo????
JABA 25/04/2013 14:14:14
#422488
Não é preciso criar um executável para cada algoritimo. Você poderia simplesmente criar uma thread para cada algoritimo.

Se for possivel, poste o codigo de um dos algoritimos pra analisarmos. Talvez consigamos melhorar o desempenho dele pra você.
LLAIA 25/04/2013 14:17:12
#422490
dê uma olhada no uso de threads.

http://www.macoratti.net/vbn_thrd.htm
MARCOS 25/04/2013 15:02:06
#422496
Pessoal,
A idéia das threads é muito boa . Na verdade eu já havia
considerando esta possiblidade. Mas....

De qualquer modo:

Usando threads ou executáveis separados, o fato 'que a 'terei 4 processos rodando
em separado [Ô]na mesma máquina [Ô] ao mesmo tempo.

O que preciso saber é:

Isto é mais rápido do que usar um executável para executar os 4 em sequência????



LLAIA 25/04/2013 16:06:51
#422505
Bom, aí acho que já depende mais do computador que vai está executando essa tarefa. é multi-processado? Multi-core ... e por aí vai. Tem como rolar um teste?
JABA 25/04/2013 16:19:22
#422508
Esses algoritmos tem que rodar em sequencia ou a ordem de execução deles não importa?
FFCOUTO 25/04/2013 19:08:56
#422522
Citação:

O software na verdade tem de rodar 4 algoritmos em sequência.Um de cada vez.



Conforme essa afirmação, de nada adianta você ter 4 processos rodando em separado. Pois há a necessidade de a primeira tarefa terminar para que a segunda começe e assim por diante.

No máximo o que você pode fazer é um upgrade em hardware e/ou otimizar esses algoritmos.
OCELOT 25/04/2013 20:21:01
#422524
Rodar em Threads ou executáveis separados só vai ser mais rápido se você tiver um processador multi-core e apenas se o gargalo ali for o processador, se o gargalo for IO (input/output), o que pode ser acesso a rede, banco de dados, arquivos, entre outras coisas provavelmente não vai fazer diferença ou faça muito pouca diferença.

O que você pode fazer para tentar melhorar o desempenho também é pegar um profiler para saber onde exatamente no seu código demora mais para executar e então tentar otimizar estas partes, mas não é algo simples, você tem que saber o que está fazendo lá para realmente ter algum ganho de desempenho.

Se o gargalo for IO tem pouca coisa que se pode fazer, se for acesso a arquivos ou a banco de dados e este for local você pode tentar colocando todos os arquivos ou o banco de dados em um HD secundário que não seja usado para mais nada, dependendo do caso você deveria usar alguns HDs em RAID 0 para melhorar o desempenho ou HDs SCSI de 10000 rpm, mas se forem muitos arquivos pequenos então o recomendado seria o uso de um HD SSD.

Se for possível você pode também carregar todos os dados na memória antes de começar a executar as rotinas, assim sobraria apenas gravação dos dados.
MARCOS 26/04/2013 08:39:51
#422534
Caros colegas....

FFCouto e Jaba,
Na verdade a ordem em que eles são executados não faz diferença.

Colega OCELOT,De fato o algoritmo faz durante o processamento,uso frequente de acesso a BD,na rede. Tanto para leitura quanto gravação de dados. Gostei da idéia de carregar todos os dados possíveis das BD para variáveis,depois processar e só
então exibir. Vou ter que reescrever boa parte do algoritmo,mas creio que é a única coisa que vai realmente melhorar a performance.
OCELOT 26/04/2013 10:17:13
#422540
Resposta escolhida
Se fosse possível rodar o programa no mesmo PC em que o banco de dados está provavelmente seria mais rápido, se não só tenha certeza de rodar o programa em um PC ligado a rede por cabo, WiFi geralmente é mais lento, principalmente se tiver vários dispositivos conectados nele
JABA 26/04/2013 11:44:57
#422551
Isso aqui pode te ajudar

http://www.macoratti.net/12/03/c_oasql.htm

http://www.macoratti.net/09/06/vbn_upc.htm
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas