Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo Aleixo

Gerenciamento De Memoria

Recommended Posts

Pessoal

To com um problema meio doido....qeu não sei se o problema é no Mysql, no PHP, no HTML ou até mesmo na instrução SQL.

 

Vou relatar o que esta acontecendo.

Moderadores, caso esteja no lugar errado pode migrar por favor.

Vamos Lá.

 

Estou criando uma aplicação aqui para a empresa onde o banco vai ficar "grande" (o maior que ja fiz, mas com certeza tera maiores).

Eu estava hospedado num servidor "generico"..meia boca.... a partir do momento que estava com mais de 200mil registros (banco todo) eu resolvi trocar para um servidor melhor, pois as consultas ja estavam demorando, mas funcionava.

Fui para o UolHost. Muito rapido....esta ótimo. e obanco ja ta com mais de 500 mil registros

Acontece que, pra fazer uma consulta usando JOIN, INNER JOIN, LEFT, RIGTH...nas 3 maiores tabelas q represntam mais de 95% do banco ele pensa, pensa, pensa, e pensa mais um pouco até dar erro. Ja investiguei....é memoria do Mysql.

Ai mudei no PHP, ao inves de fazer td numa consulta.....fazia uma.....pegava os dados....fazia a outra.....depois a outra....assim ele fecha a tabela antes de abrir a outra. Em determinados casos ele processa o script até o fim....outros continua dando o erro de memoria.

 

Agora chega o que quero arrumar........ele esta processando td antes de me retornar a pagina....

por exemplo.....no php eu faço a consulta....do um while e mando ir exibindo o que ele encontra....normalmente....ele iria exibindo conforme for processando...... aogra ele ta processando td....e depois ja retorna "pronto". Na minha aplicação existe algumas importações de arquivo TXT e captura de dados via CURL......se não for exibindo eu não sei o que ta acontecendo...se ta processando ou naum...... NO pangaré....ele era lento....mas ia exibindo.

 

Onde esta esse problema?!?!

Configuração do PHP ou é no Mysql?

 

Valew galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, creio eu que o problem está como os dados são mostrados na tela. No caso como você, o certo é processar (buscar a informação no banco) e retornar na tela, a medida que for mudando o estado da tela fazer a consulta. Se voce faz uma consulta buscando tudo na tabela certamente irá demorar mais, pois seu banco ja está com muitos registros.

 

Como você está utilizando a linguagem PHP estou transferindo para a área correta, poste trechos do seu código aonde a consulta é processada e como ela é formatada que o pessoal irá te auxiliar na sua lógica de programação.

 

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew....

Mas justamente qpós eu ter mudado a forma de montar o codigo....ele tem vez q exibe e tem fez q naum.

E por muitas vezes ele da o erro "mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ". Normalmente isso seria erro na consulta. Mas a consulta ta correta.....ele da esse erro por falta de memoria.

Como posso aumentar a memoria do mysql?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elas estão indexadas?

 

O @Jaime_Pinheiro está correto e esse é muito provavelmente o problema. Já trabalhei com relacionamento entre tabelas com muito mais registros e nunca tive qualquer tipo de problema, contudo, além dos índices terem sido muito bem planejados, houve também um particionamento vertical, além do horizontal.

 

Verifique todas as suas consultas utilizando o EXPLAIN dentro do MySQL.

 

Uma ilustração:

mysql> create schema muitos_registros;
Query OK, 1 row affected (0.00 sec)

mysql> use muitos_registros;
Database changed

mysql> CREATE TABLE `tabela1` (
	-> 	`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
	-> 	`valor` MEDIUMINT(8) UNSIGNED NOT NULL,
	-> 	PRIMARY KEY(`id`)
	-> );
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT Count(`id`) AS `total_tabela1` FROM `tabela1`;
+---------------+
| total_tabela1 |
+---------------+
| 	1500000 |
+---------------+
1 row in set (0.00 sec)

mysql> CREATE TABLE `tabela2` (
	-> 	`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
	-> 	`tabela1` MEDIUMINT(8) UNSIGNED NOT NULL,
	-> 	`valor` MEDIUMINT(8) UNSIGNED NOT NULL,
	-> 	PRIMARY KEY(`id`)
	-> );
Query OK, 0 rows affected (0.08 sec)

mysql> SELECT Count(`id`) AS `total_tabela2` FROM `tabela2`;
+---------------+
| total_tabela2 |
+---------------+
| 	1500000 |
+---------------+
1 row in set (0.00 sec)

Como pode ver, criamos uma base chamada muitos_registros e nela duas tabelas, ambas com 1.500.000 registros, perceba que nenhuma das duas possui qualquer índice além da chave primária, agora uma consulta simples:

 

mysql> SELECT `t1`.`valor` AS `valor`
	-> FROM `tabela1` AS `t1`
	-> LEFT JOIN `tabela2` AS `t2` ON(`t2`.`tabela1`=`t1`.`id`)
	-> WHERE `t1`.`id`=1500;
+----------+
| valor	|
+----------+
| 16777215 |
+----------+
1 row in set (0.24 sec)

Como pode ver, a consulta levou 0.24 segundos, um tempo relativamente grande para uma conexão em um banco local, vamos melhorar isso adicionando um índice na tabela2 para a coluna tabela1:

 

mysql> ALTER TABLE `muitos_registros`.`tabela2` 
	-> ADD INDEX `tabela1` (`tabela1` ASC) ;
Query OK, 1500000 rows affected (9.75 sec)
Records: 1500000 Duplicates: 0 Warnings: 0

Vamos refazer a consulta:

mysql> SELECT `t1`.`valor` AS `valor`
	-> FROM `tabela1` AS `t1`
	-> LEFT JOIN `tabela2` AS `t2` ON(`t2`.`tabela1`=`t1`.`id`)
	-> WHERE `t1`.`id`=3200;
+----------+
| valor	|
+----------+
| 16777215 |
+----------+
1 row in set (0.01 sec)

Perceba que utilizamos um ID diferente na segunda consulta para evitar o cache e, mesmo assim, obtivemos o resultado em incríveis 0.01 segundos.

 

Algumas vezes, o particionamento vertical pode ser interessante em tabelas com grande volume de dados, veja só:

mysql> ALTER TABLE `muitos_registros`.`tabela1` PARTITION BY HASH(`id`) PARTITIONS 10;
Query OK, 1500000 rows affected (6.35 sec)
Records: 1500000 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE `muitos_registros`.`tabela2`
	-> DROP PRIMARY KEY 
	-> , ADD PRIMARY KEY (`id`, `tabela1`);
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE `muitos_registros`.`tabela2` PARTITION BY HASH(`tabela1`) PARTITIONS 10;
Query OK, 1500000 rows affected (9.07 sec)
Records: 1500000 Duplicates: 0 Warnings: 0

Com as partições verticais criadas, vamos repetir a consulta:

mysql> SELECT `t1`.`valor` AS `valor`
	-> FROM `tabela1` AS `t1`
	-> LEFT JOIN `tabela2` AS `t2` ON(`t2`.`tabela1`=`t1`.`id`)
	-> WHERE `t1`.`id`=78688;
+----------+
| valor	|
+----------+
| 16777215 |
+----------+
1 row in set (0.00 sec)

Opz, o resultado simplesmente pulou na tela, 0.00 segundos para executar a mesma consulta que antes levou 0.24 segundos, uma melhora considerável no desempenho !!!

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Joao Batista Neto, uma verdadeira aula, vou ate add esse post nos favoritos aki.

 

vou tentar melhorar minha consulta la tmb.

 

abracos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou ate add esse post nos favoritos aki.

:D

 

Esse link pode ser de interessante leitura sobre particionamento vertical http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitions.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kraka......mó aula rolando aqui....rsrsr....que bom que minha duvida ta ajudando outros........isso sim se chama fórum...to até arrepidado!!!!!

rsrsrsr

 

Bom pessoal.....

vou estudar mais sobre SQL.....eu sou muito fraco nesse ponto.....

as consultas diretas no mysql são rapidas....

o que me deixa encucado é q no php ele deveria ir exibindo os resultados e naum vai

 

olha o code abaixo..... é coisa de amador.......mas funcionava muito bem no pangaré

 

<table width="100%" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="tahoma">
<tr>
                <td colspan="4" class="bold t16 vermelhoesc bot15 esq10 top10">Processamento da Revista</td>
                </tr>
                <tr>
                <td width="281" bgcolor="#B3C6A6" class="top10 esq10 t12 branco bold">Cliente</td>
                <td width="103" align="center" bgcolor="#B3C6A6" class="top10 esq10 t12 branco bold">Processo</td>
                <td width="84" align="center" bgcolor="#B3C6A6" class="top10 esq10 t12 branco bold">Despacho</td>
                <td width="650" bgcolor="#B3C6A6" class="top10 esq10 t12 branco bold">Observação</td>
          </tr>
<?
          		$sql = mysql_query("SELECT * FROM sis_revistas WHERE id='$id'");
				$res = mysql_fetch_array($sql);
				$data_rpi = $res["data"];
				$rpi = $res["rpi"];
				
				
				$ponteiro = fopen ("revistas/".$id.".txt", "r");
				$informacao	=	fread($ponteiro, filesize("revistas/".$id.".txt"));
				$informacao	= str_replace("\n", "<br>", $informacao);
				$publi = explode("No.", $informacao);
				
				for($i=1;$i<=100000;$i++){
				
					$linhas = explode("<br>", $publi[$i]);
					
					$a = str_split($linhas[0]);
					$processo = trim($a[0].$a[1].$a[2].$a[3].$a[4].$a[5].$a[6].$a[7].$a[8]);
					$d_deposito = data2banco($a[11].$a[12].$a[13].$a[14].$a[15].$a[16].$a[17].$a[18].$a[19].$a[20]);
					$despacho = trim($a[23].$a[24].$a[25]);
					if(empty($processo)) break;
					
					$b = substr($linhas[1], 4);
					$b = explode("(",$B);
					$titular = trim(utf8_encode($b[0]));
					
					$c = explode(":", $linhas[2]);
					$doc = trim($c[1]);
					
					$d = revista_n_linha($linhas,"Apres");
					$d_ap = str_word_count($linhas[$d], 1);
					$tipo = inpi_nome2tipo($d_ap[1]);
					$natureza = $d_ap[3]." ".$d_ap[4];
					//if($natureza=="De Servi") $natureza = "De Serviço";
					
					$marca = utf8_encode(substr($linhas[revista_n_linha($linhas,"Marca")], 7));
					
					
					$f = utf8_encode(substr($linhas[revista_n_linha($linhas,"Clas")], 16));
					$g = utf8_encode(substr($linhas[revista_n_linha($linhas,"NCL")], 0, 9));
					if($f){
						$classe = $f;
					}else{
						$classe = $g;
					}
					
					$cfe = utf8_encode(substr($linhas[revista_n_linha($linhas,"CFE")], 7));
					$apostila = utf8_encode(substr($linhas[revista_n_linha($linhas,"Apostila")], 10));
					$procurador = utf8_encode(substr($linhas[revista_n_linha($linhas,"Procurador")], 12));
					$complemento = utf8_encode(substr($linhas[revista_n_linha_compl($linhas)], 1));
					$especificacao = utf8_encode(substr($linhas[revista_n_linha($linhas,"NCL")], 10));
				
					if(strlen($doc)==11){
						$status=3;
					}elseif(strlen($doc)==14){
						$status=1;
					}else{
						$status=5;
					}
												
					$sql_2 = mysql_query("SELECT * FROM sis_empresas WHERE documento='$doc'");
						if(!mysql_num_rows($sql_2)){
							$sql_3 = mysql_query("INSERT INTO sis_empresas (documento,razao_social,status) VALUES ('$doc','$titular','$status')");
						}
					
					$sql_3 = mysql_query("SELECT * FROM sis_processos WHERE processo='$processo'");
						if(!mysql_num_rows($sql_3)){
							$sql_5 = mysql_query("INSERT INTO sis_processos (titular,titular_nome,processo,procurador,marca,prioridade,tipo,classe,vigencia,concessao,caducidade,natureza,cfe,apostila,especificacao) VALUES ('$doc','$titular','$processo','$procurador','$marca','$d_deposito','$tipo','$classe','$vigencia','$concessao','$caducidade','$natureza','$cfe','$apostila','$especificacao')");
						}
						$sql_4 = mysql_query("SELECT id FROM sis_despachos WHERE rpi='$rpi' AND cod='$despacho' AND processo='$processo'");
							if(!mysql_num_rows($sql_4)){
								$sql_6 = mysql_query("INSERT INTO sis_despachos (processo,rpi,data_rpi,cod,complemento,titular) VALUES ('$processo','$rpi','$data_rpi','$despacho','$complemento','$doc')");	
							}
			  ?>
<tr>
                <td width="281" class="top10 esq10 arial t12 cinza42"><?= $titular; ?></td>
                <td width="103" align="center" class="top10 esq10 arial t12 cinza42"><?= $processo; ?></td>
                <td width="84" align="center" class="top10 esq10 arial t12 cinza42"><?= $despacho; ?></td>
                <td width="650" class="esq10 top10 arial t12 cinza42"><?= $complemento; ?></td>
          </tr>
              <? } 
			  	$sql_7 = mysql_query("UPDATE sis_revistas SET processa=1 WHERE id='$id'");
				unlink("revistas/".$id.".txt")
			  ?>

Como você podem ver.....ele deveria ir exibindo as linhas da tabela........mas ele executa td primeiro depois ele retorna um html pronto......

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rodrigo, você pode se utilizar de um sistema de buffer, para ir enviando resultados conforme o processamento do PHP.

 

Apesar de eu não recomendar muito, por você acabar tendo uma marcação HTML incompleta até que todos os registros sejam lidos, parece ser a melhor solução para o seu problema.

 

Off-Topic: Vou particionar uma tabela do DNE que tenho aqui. Já tinha aprendido sobre índices por causa dos 815K registros de CEP que ela tem. Como o João já ilustrou perfeitamente, os ganhos de desempenho em alguns casos podem chegar a 400~500% (no caso do João, o ganho de desempenho foi de aproximadamente 2400% mas porque nos tratávamos de um banco 'mal formado').

 

O uso de foreign-keys (mesmo que você não vá se utilizar das regras ON UPDATE e ON DELETE) também pode auxiliar evitando a duplicidade de índices, já que o mesmo faz referências aos índices em outra tabela.

 

Eu sugiro que dê uma olhada neste artigo, que detalha um pouco sobre índices, sobre o (já citado) uso de EXPLAIN e ainda outras ferramentas como Optimize e Analyze. Um adendo que tenho a fazer no mesmo é sobre a montagem de índices. Procure fazê-los por ordem de prioridade, do jeito que os mesmos acontecerão nas queryes.

 

Se você for montar uma query

SELECT `nome`,`sobrenome` FROM `cadastros` WHERE `nome`="x" AND `sobrenome`="y"

 

seu índice deve ser assim

ALTER TABLE `cadastros` ADD INDEX(`nome`,`sobrenome`)

 

Enquanto a query for:

SELECT `nome`,`sobrenome` FROM `cadastros` WHERE `sobrenome`="x" AND `nome`="y"

 

o índice passa a ser o contrário

ALTER TABLE `cadastros` ADD INDEX(`sobrenome`,`nome`)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom @Rodrigo Aleixo,

 

Inicialmente eu cheguei a pensar que o tópico tinha sido movido incorretamente de MySQL para PHP, contudo, vendo seu código agora, de fato ele foi movido corretamente.

 

Não me leve a mal, mas, seu código precisa ser 100% reescrito.

 

Esse monte de tratamento com várias funções com os dados do arquivo, em conjunto com a iteração com os dados do banco misturado com várias outras consultas em um loop <= 100000, esse código tende a falhar independente do número de registros da consulta principal.

 

Primeiro passo, separe a exibição da lógica, removendo seu HTML da parte da consulta.

 

Com a lógica separada, separa cada etapa do processo em um processo independente, trabalhe primeiro somente com o arquivo, depois somente com a consulta principal e somente então com as sub-consultas.

 

Evite ao máximo esse tipo de coisa:

$a = str_split($linhas[0]);
$processo = trim($a[0].$a[1].$a[2].$a[3].$a[4].$a[5].$a[6].$a[7].$a[8]);
$d_deposito = data2banco($a[11].$a[12].$a[13].$a[14].$a[15].$a[16].$a[17].$a[18].$a[19].$a[20]);
$despacho = trim($a[23].$a[24].$a[25]);

 

Esse tipo de concatenação é extremamente penosa para o interpretador, só nesse trecho, em um loop <= 100000 já vai lhe trazer uma demora considerável.

 

Em várias partes do seu código você repete:

utf8_encode(...)

 

Novamente você está penalizando o interpretador com chamada redundante da função utf8_encode(), se a informação que precisa ser codificada está no arquivo, faça isso somente uma vez ao ler do arquivo, se estiver no banco, utilize set names.

 

Nas sub-consultas, você verifica em 3 pontos antes de inserir uma informação, se a informação verificada não pode ser duplicada, crie um índice UNIQUE no seu banco de dados para as colunas verificadas, você ainda pode fazer uso do INSERT ... ON DUPLICATE KEY UPDATE ou de REPLACE se for o caso.

 

Enfim, devo sugerir que você reveja todo o seu código, o problema realmente não é no banco de dados e sim no PHP.

 

Caso tenha dúvidas durante a revisão, poste-a aqui que tentaremos ajudá-lo na medida do possível.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valew..... foi uma aula de mysql....

aprendi varias coisas q melhoraram no desempenho...

Maaaaaassssss......meu problema não resolvido....

 

Olha só o code abaixo....coisa simples

 

<?
include("biblioteca/conecta.php");
$sql_1 = mysql_query("SELECT codigo,categoria FROM inpi_cod_despacho");
while($res_1 = mysql_fetch_array($sql_1)){
	$cod = $res_1["codigo"];
	$situacao = $res_1["categoria"];
	$sql_2 = mysql_query("UPDATE sis_despachos SET situacao='$situacao' WHERE cod='$cod'");
	echo $cod." - ".$situacao."<br>";

}
?>

a primeira tabela é pequena....300 regs......a segunda é maior...mais de 230.000.......

"teoriacamente"....ele deveria exibir as vars $cod e $situacao....conforme o while for acontecendo.....ai que mora o problema.....ele processa todo o while pra depois retornar a pagina toda........

entenderam o problema???? rsrsrsrs

Ele fica processando até terminar o while....somente depois do while terminado ele exibe o resultaod.....todas as vars $cod e $situacao.....

 

 

Ps.: Acabei de fazer outro teste..... desculpe minha jeguisse, mas,...em outro script semelhante o WHERE da tabela onde ocorre o UPDATE era assim "WHERE processo='$processo'" onde esse campo esta como UNIQUE no bd.....esse script correu numa velocidade impressionante....... no script q coloquei la em cima....o campo COD não pode ser UNIQUE... ...por estar UNIQUE é mais rapido mesmo certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então tente trabalhar com saída buferizada:

 

ob_start();

while ( ... ){
//loop muito demorado, com saída

ob_flush();
}

ob_end_flush();

 

http://br.php.net/manual/pt_BR/ref.outcontrol.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então João...

Toda essa novela das 8 comecou pq eu estava tentando fazer um update....e naum funcionava.

 

Essa minha aplicação ela trabalha muito com CURL.

Para eu atualizar meu BD....eu faço uma requisição......comparo o que tenho atualizo o que tenho ou insiro o q naum tenho.

 

Neste exato momento estou tentando atualizar uma lista de processos de um cliete.

No site de referencia possui 725....eu tenho no meu BD 720...a grande maioria esta faltando dados.

 

Ai vem a funcao para atualizar isso.

 

<?
$consulta = curl_captcha_inpi("Marcas", $_POST["letras"]);
if($consulta==true){
	$busca = curl_pesquisa_cnpj($doc);
	if($busca){	
		$total = inpi_busca_total_processos($busca);
		if($total>=1){
			$tabela = inpi_busca_separa_processos($busca);
			ob_start();
			for($i=1;$i<=$total;$i++){
				$linha  = inpi_busca_linha_processos($tabela,$i);
				$id_inpi = inpi_busca_id_processo($linha);
				$processo = inpi_busca_processo($linha);
				$titular_nome = utf8_encode(inpi_busca_titular_nome($linha));
				$marca = utf8_encode(inpi_busca_marca($linha));
				$classe = inpi_busca_classe($linha);
				$prioridade = data2banco(inpi_busca_prioridade($linha));
				$query = "UPDATE sis_processos SET id_inpi='$id_inpi',m_inpi=1,titular_nome='$titular_nome',marca='$marca',classe='$classe' WHERE processo='$processo'";
				$sql_update = mysql_query($query);
				echo  mysql_errno()." - ".mysql_error()."<br>";
				ob_flush();
			}
			ob_end_flush();
		echo "Dados Atualizados com sucesso.";
		echo "<ul id=\"icons\"><li class=\"ui-state-default ui-corner-all\"><a href=\"empresa_processos.php?doc=$doc\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span>Voltar</a></li></ul>";
		echo "<br><br>";
		}else{
			echo "Esta empresa não possui processos no INPI.";
			echo "<ul id=\"icons\"><li class=\"ui-state-default ui-corner-all\"><a href=\"empresa_processos.php?doc=$doc\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span>Voltar</a></li></ul>";
			echo "<br><br>";
		}
	}else{
			echo "Ocorreu um erro na consulta.";
			echo "<ul id=\"icons\"><li class=\"ui-state-default ui-corner-all\"><a href=\"atualizar_empresa_inpi_2.php?doc=$doc\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span>Tentar Novamente</a></li></ul>";
			echo "<br><br>";
	}		
}else{
	echo "Ocorreu um erro na consulta.";
	echo "<ul id=\"icons\"><li class=\"ui-state-default ui-corner-all\"><a href=\"atualizar_empresa_inpi_2.php?doc=$doc\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span>Tentar Novamente</a></li></ul>";
	echo "<br><br>";
}
?>

Criei algumas funcoes que separa apenas os dados que quero para fazer o update.

a query que ele gera...esta perfeita.....ja fiz um teste dando um echo na query...copiei e joguei no myadmin....e ele executou o update perfeitamente.

 

neste codigo acima esta alterado para exibir o erro.

que deu!!!

 

2006 - MySQL server has gone away

 

foi como td comecou.....pesquisei e o que encontrei q é falta de memoria do mysql.....

 

JOão.....você que tem a maior paciencia do mundo.....rsrs.......

O que esta de errado????

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que esta de errado????

 

Como eu já disse @Rodrigo Aleixo, você possui vários erros, e, lamento a brincadeira, mas o "MySQL server has gone away" por causa disso...

 

Repetindo o que eu já disse:

 

1. Separe sua lógica de sua exibição.

2. Remova as redundâncias.

3. Separe cada processo grande em vários processos pequenos.

4. Recupere todo o conteúdo que você precisa para, apenas depois, trabalhar com o banco de dados.

 

Sabe Rodrigo, existem alguns tipos de aplicações que modelagem, arquitetura e outras desses "chatices" realmente não são importante, porém existem alguns tipos de aplicações cujo problema causado pelo não uso ou pelo uso errado é simplesmente o insucesso.

 

Se você realmente estiver disposto a resolver seu problema, sugiro que siga minhas dicas, já tive que desenvolver aplicações semelhantes porém, ao contrário de alguns milhares de registros, tive que trabalhar com alguns milhões e, mesmo assim, obtive o resultado esperado em uma velocidade tão absurdamente grande que o usuário chega a achar que nada ocorreu.

 

Então, por partes, separe sua lógica de sua exibição e poste o código resultante aqui que, ao terminar todos os 4 passos eu lhe ajudarei a construir um sistema de múltiplas threads que fará seu processo que deve demorar alguns minutos demorar no máximo 2 segundos.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.