Fórum xmldocument muito lento #407586
13/09/2011
0
É 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
Curtir tópico
+ 0Posts
13/09/2011
Otavio Pimenta
Sobe !!
Gostei + 0
14/09/2011
Otavio Pimenta
Ninguém?
Gostei + 0
15/09/2011
Otavio Pimenta
<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;
Gostei + 0
19/09/2011
Otavio Pimenta
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)