PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum xmldocument muito lento #407586

13/09/2011

0

Bom dia "Delpheiros" .
       É o seguinte, tenho um arquivo XML com 250 mb, referente a aproximadamente dados cadastrais de quase 300.000 clientes, e preciso  transformar em uma base de dados para tratar com o banco de clientes que tenho aqui em FB.       Fiz todo o processo com um arquivo menor e está OK, porem com esse arquivo esta estourando a memória. A pergunta.       Quanto o xml document aguenta? Ele vai lendo e carregando na memória? e se alguém tem uma sugestão para eu resolver isso, porque já faz 1 semana que estou preso nisso.
desde ja agradeço a todos.
Otavio Pimenta

Otavio Pimenta

Responder

Posts

13/09/2011

Otavio Pimenta


Sobe !! 
Responder

Gostei + 0

14/09/2011

Otavio Pimenta


Ninguém? 
Responder

Gostei + 0

15/09/2011

Otavio Pimenta

Nenhum palpite gente???Vou colocar um pedacinho do xml, sem o cabecalho que é grande, o problema está quando entra no nó beneficiario, que tem 3 atributos e tres filhos, são quase 300.000 clientes, e quando o loop chega a 130 ou 135.000 registros estoura a memória, 2gb. Alguem se habilita a ajudar?

 <mensagem>    <ansParaOperadora>      <conferencia>        <beneficiario cco="008901158930" situacao="INATIVO" dataAtualizacao="2007-09-08">          <identificacao>            <cpf>06334000000</cpf>            <nome>A</nome>            <sexo>1</sexo>            <dataNascimento>1951-01-16</dataNascimento>            <nomeMae>NÃO CONSTA DO REGISTRO CIVIL</nomeMae>          </identificacao>          <endereco>            <logradouro>A</logradouro>            <numero>00000</numero>            <complemento>A</complemento>            <bairro>A</bairro>            <codigoMunicipio>350000</codigoMunicipio>            <cep>13400000</cep>            <resideExterior>0</resideExterior>          </endereco>          <vinculo>            <codigoBeneficiario>21520000000</codigoBeneficiario>            <relacaoDependencia>3</relacaoDependencia>            <dataContratacao>1999-11-03</dataContratacao>            <dataCancelamento>2002-05-31</dataCancelamento>            <motivoCancelamento>43</motivoCancelamento>            <numeroPlanoANS>424136993</numeroPlanoANS>            <coberturaParcialTemporaria>0</coberturaParcialTemporaria>            <itensExcluidosCobertura>0</itensExcluidosCobertura>          </vinculo>        </beneficiario>



O codigo é esse.

 nodemensagem:= VXMLDOC.DocumentElement.ChildNodes['mensagem'].ChildNodes['ansParaOperadora'].ChildNodes['conferencia'].ChildNodes['beneficiario'];  Memo1.Lines.Add('NÓs - '+nodemensagem.NodeName); if not(nodemensagem = nil) then  begin                nodemensagem.ChildNodes.First;                Memo1.Lines.Add('Processando Arquivos...');             repeat                  ajustascript:= '';//*************** NÓ beneficiairio *********************                   cco_sib:= copy(nodemensagem.AttributeNodes['cco'].Text,1,10);                   sib_dv_cco:= copy(nodemensagem.AttributeNodes['cco'].Text,11,2);//                 ShowMessage(Nodebeneficiario.LocalName);                   if nodemensagem.AttributeNodes['situacao'].Text = 'INATIVO'then                    situacao:= 'C'                     ELSE                    situacao:='A';                   dataatualizacao:= nodemensagem.AttributeNodes['dataAtualizacao'].Text;
                   ajustascript:= '('+QuotedStr(cco_sib)+','+QuotedStr(sib_dv_cco)+','+QuotedStr(situacao)+','+quotedstr(dataatualizacao)+',';
//******* ******** NÓ identificacao ***************************                   NodeIdentificacao:= nodemensagem.ChildNodes['identificacao'];                   if not(NodeIdentificacao = nil) then                     begin                       cpf:= NodeIdentificacao.ChildNodes['cpf'].Text;//                       nome:= NodeIdentificacao.ChildValues['nome'];//                       sexo:= NodeIdentificacao.ChildValues['sexo'];                       datanascimento:= NodeIdentificacao.ChildNodes['dataNascimento'].text;                       nomemae:= NodeIdentificacao.ChildNodes['nomeMae'].Text;
                       if cpf = '' then                         ajustascript:= ajustascript +'null'+','                        else                         ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['cpf'])+',';
                         ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['nome'])+','+quotedstr(NodeIdentificacao.ChildValues['sexo'])+',';                         ajustascript:= ajustascript +quotedstr(NodeIdentificacao.ChildNodes['dataNascimento'].Text)+','+quotedstr(NodeIdentificacao.ChildNodes['nomeMae'].Text)+',';                     end;
                      //***************  NÓ endereco ***************************
                     NodeIdentificacao:= nodemensagem.ChildNodes['endereco'];                    if not(NodeIdentificacao = nil)then                     begin                        NodeIdentificacao.ChildNodes.First;//                        logradouro:= NodeIdentificacao.ChildNodes['logradouro'].Text;//                        numero:= NodeIdentificacao.ChildNodes['numero'].Text;                        complemento:= NodeIdentificacao.ChildNodes['complemento'].Text;                        bairro:= NodeIdentificacao.ChildNodes['bairro'].Text;//                        codigomunicipio:= NodeIdentificacao.ChildNodes['codigoMunicipio'].Text;//                        cep:= NodeIdentificacao.ChildNodes['cep'].Text;//                        resideexterior:= NodeIdentificacao.ChildNodes['resideExterior'].Text;
                        if complemento = '' then                        ajustascript := ajustascript +'null'+','                         else                         ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['complemento'])+',';
                       if bairro = '' then                        ajustascript := ajustascript +'null'+','                         else                         ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['bairro'])+',';
                        ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildNodes['logradouro'].Text)+','+QuotedStr(NodeIdentificacao.ChildNodes['numero'].Text)+',';                        ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['codigoMunicipio'])+',';                        ajustascript:= ajustascript +QuotedStr(NodeIdentificacao.ChildValues['cep'])+','+quotedstr(NodeIdentificacao.ChildValues['resideExterior'])+',';                      end;
                      //*************** NÓ vinculo ***************************
                   NodeIdentificacao:= nodemensagem.ChildNodes['vinculo'];                    if not(NodeIdentificacao = nil)then                     begin//                        NodeIdentificacao.ChildNodes.First;                        codbeneficiario:= NodeIdentificacao.ChildValues['codigoBeneficiario'];                        codigocontrato:= copy(codbeneficiario,1,4);                        codigotitular:= copy(codbeneficiario,5,6);                        codigodependente:= copy(codbeneficiario,11,2);
                        relacaodependendencia:= NodeIdentificacao.ChildNodes['relacaoDependendencia'].text;//                        dataadmissao:= NodeIdentificacao.ChildValues['dataContratacao'];                        datacancelamento:= NodeIdentificacao.ChildNodes['dataCancelamento'].text;                        motivocancelamento:= NodeIdentificacao.ChildNodes['motivoCancelamento'].Text;
                        numeroplanoans:= NodeIdentificacao.ChildNodes['numeroPlanoAns'].text;                        cobparcialtemp:= NodeIdentificacao.ChildNodes['coberturaParcialTemporaria'].Text;                        itensexcluidoscob:= NodeIdentificacao.ChildNodes['itensExcluidosCobertura'].text;
                        ajustascript:= ajustascript +QuotedStr(codigocontrato)+','+QuotedStr(codigotitular)+','+quotedstr(codigodependente)+',';
                        if relacaodependendencia = '' then                         ajustascript:= ajustascript + 'null'+','                          else                         ajustascript := ajustascript + quotedstr(NodeIdentificacao.ChildValues['relacaoDependendencia'])+',';
                         ajustascript:= ajustascript +quotedstr(NodeIdentificacao.ChildValues['dataContratacao'])+',';
                         if datacancelamento = '' then                          ajustascript:= ajustascript + 'null'+','                          else                          ajustascript:= ajustascript +quotedstr(NodeIdentificacao.ChildValues['dataCancelamento'])+',';
                        if motivoCancelamento = '' then                         ajustascript:= ajustascript +quotedstr('0')+','                          else                         ajustascript:= ajustascript + QuotedStr(NodeIdentificacao.ChildValues['motivoCancelamento'])+',';
                        if numeroplanoans = '' then                         ajustascript:= ajustascript +quotedstr('0')+','                          else                         ajustascript:= ajustascript + QuotedStr(NodeIdentificacao.ChildValues['numeroPlanoAns'])+',';

                         if cobparcialtemp = '' then                         ajustascript := ajustascript + 'null'+','                          else                         ajustascript:= ajustascript +quotedstr(NodeIdentificacao.ChildValues['coberturaParcialTemporaria'])+',';

                         if itensexcluidoscob = '' then                         ajustascript := ajustascript + 'null'+','                         else                         ajustascript:= ajustascript +quotedstr(NodeIdentificacao.ChildValues['itensExcluidosCobertura'])+');';
                     end;
                   try                    if FileExists(arquivo)then                     append(script)                    else                      Rewrite(script,arquivo);                      Write(script,montascript);                      writeln(script,ajustascript);                    finally                      CloseFile(script);                    end;
                    contaid:= contaid + 1;                    Application.ProcessMessages;                    nodemensagem:= nodemensagem.NextSibling;
              until nodemensagem = nil;             end;//                    contaid:= contaid + 1;                    Label2.Visible := true;                    Label2.Caption:= inttostr(contaid);                    label2.Repaint;
                    fim:= time;                    total:= (inicio - fim);                    label4.Caption:= formatdatetime('hh:mm:ss:zzz',total);                    label4.Repaint;
                    memoria:= AllocMemCount;//                    bytes:= AllocMemSize;                    label6.Caption:= inttostr(memoria);                    label6.Repaint;

end;
Responder

Gostei + 0

19/09/2011

Otavio Pimenta

sobe!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar