Pergunta

Se a análise, vamos apenas dizer HTML, depois de ler o nome do elemento, será benéfico para estagiário-lo?A lógica aqui é que este analisador irá analisar o mesmo strings (nomes de elemento) repetidamente novamente?E vários documentos serão analisados.

Teoria:

// elemName is checked for null.
MarkupNode node = new MarkupNode() 
{
   Name = String.IsInterned(elemName) ? elemName : String.Intern(elemName),
   ...
};

Esta pergunta foi motivada pela pergunta cadeia-internar-memória.

Foi útil?

Solução

Eu realmente não sabia dizer exatamente se isso ajudaria seu desempenho ou não. Dependeria de quantas cordas você usa e com que frequência você cria instâncias dessas seqüências. O internação geralmente é feito automaticamente, portanto, a verificação explicitamente se a string for internada pode realmente aumentar sua sobrecarga e reduzir seu desempenho. Quando se trata de uso de memória, as sequências internadas podem definitivamente usar menos memória.

Se você deseja usar a internação de string, existem algumas maneiras melhores de alcançá -la. Em primeiro lugar, eu coloca seus nomes de elementos em uma classe estática cheia de constantes públicas de string. Qualquer string literal encontrado no código -fonte do seu programa está definitivamente e automaticamente internado. Tais strings são carregadas no pool interno quando seu aplicativo é carregado. Se suas cordas não puderem ser definidas como constantes para a preparação de estagiários de tempo de compilação, então eu simplesmente ligaria String.intern (...) Em vez de fazer a expressão ternária completa String.isinterned (...)? ...: String.intern (...). O método do Intern verificará automaticamente se a string está internada, retornará a versão internada, se for e adicionará a string ao pool interno e retornará isso se não estiver. Não há necessidade de verificar manualmente o ISNTERNED.

Novamente, não posso dizer se as seqüências de strings que internam manualmente melhorarão o desempenho. Se você usar constantes, elas serão automaticamente internadas para você, da maneira mais ideal, e essa é a melhor abordagem para melhorar o desempenho e o uso de memória de seqüências de cordas reutilizadas regularmente. Sinceramente, recomendo que você fique longe da internação manual e deixe o compilador e a otimização do tempo de execução para você.

Outras dicas

Claro, estagiando cadeias de ajuda performanance mas como o @jrista disse: "Se você usar constantes, eles serão automaticamente internado para você,...".

Aqui estão alguns artigos podem ajudá-lo,

Otimizando A Cadeia De Caracteres C# Desempenho

RESUMO:Compartilhamento de Memória, C# mantém algo chamado de "estagiário tabela." Esta é uma lista de cadeias de caracteres que são actualmente referenciado.Se uma nova string é criada, então o estagiário tabela é verificada.Se a sua seqüência já está lá, então ambas as variáveis apontam para o mesmo bloco de memória mantida pelo estagiário tabela.

http://blog.cumps.be/string-concatenation-vs-memory-allocation/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top