Pergunta

Eu preciso de conselhos. Eu tenho pedido que as importações 10.000 linhas contendo nome e endereço a partir de um arquivo de texto em XElements que são posteriormente adicionados a uma fila sincronizada. Quando a importação é completar os tópicos desova de aplicativos de trabalho que processam os XElements por deenqueuing-los, fazer uma chamada de banco de dados, inserindo a saída do banco de dados para o documento pedido e inserir o documento transformado em uma fila de saída. Quando todos os pedidos foram processados ??a saída fila é gravado no disco como um documento XML.

Eu costumava XElements para os pedidos porque eu precisava de flexibilidade para adicionar campos para o pedido durante o processamento. ou seja Dependendo do tipo de trabalho o aplicativo pode exigir que adicionar o número de telefone, data de nascimento ou endereço de e-mail a um pedido baseado em um jogo de nome / endereço contra um banco de dados de registro público.

As minhas perguntas é; Os XElements parece usar um pouco de memória e eu sei que há um monte de análise que o documento faz o seu caminho através dos métodos de processamento. Estou pensando em substituir os XElements com um objeto dicionário, mas eu sou cético o ganho vai valer a pena o esforço. Na essência, ele vai fazer a mesma coisa.

Os pensamentos?

Foi útil?

Solução

Então, você não está realmente usando qualquer XML como tal? Você está apenas usando XElement como uma coleção de pares nome / valor? Se assim for, eu definitivamente usar um dicionário. Eu esperaria que seu código potencialmente sair limpo também.

Por outro lado, se você está realmente usando XML, você provavelmente vai querer ficar com XElement.

Você realmente tem um problema ? Você diz que ele está usando-se um pouco de memória - você tem o suficiente de memória? você poderia comprar mais memória? Isso seria quase certamente ser mais barato do que gastar mesmo algumas horas refatoração, se é apenas por uma questão de economia de memória. (Parece que este aplicativo só é executado em uma caixa -.. Eu posso estar errado Quanto mais amplamente implantada é, mais provavelmente faz sentido para passar algum tempo otimizando-o)

EDIT: Ok, então a compra de mais memória não é realmente viável. Mesmo assim, você realmente tem um problema? Qual é o impacto deste talvez usando mais memória do que ele precisa? O que é que realmente custando?

Outras dicas

Usando o LINQ pode fazer sentido se você pode evitar ter que armazenar a árvore inteira antes de usá-lo.

Eu olhava para fazer tanto o processamento quanto possível na construção da consulta a partir de cada linha.

Você, então, tomar os resultados da consulta e, em seguida, processá-los, armazenando o resultado no banco de dados.

Isto irá reduzir problemas de memória, como cada linha é somente leitura quando necessário e, em seguida, processada e salva.

Você pode achar isso útil: http: // www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

Tome os resultados de sua consulta, fazer um loop através de cada cliente e salvar o registro:

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top