Ontem postei um artigo sobre como maximizar o desempenho do .NET. Muito obrigado por seus comentários. Alguns deles apontaram alguns erros no artigo. tem se beneficiado muito.
O artigo de ontem focou principalmente em melhorar a velocidade de alguns detalhes da escrita de código. Pode ser difícil realmente sentir a melhoria de desempenho, mas como programador, melhorar constantemente a qualidade de seu próprio código é o objetivo que você busca constantemente.
Na verdade, com o desenvolvimento do hardware, a velocidade do hardware agora atende às necessidades da maioria das pessoas. Algumas pessoas até sugerem que os algoritmos estão se tornando cada vez menos eficazes no desenvolvimento de software atual. Lembro-me de ter assistido a um vídeo de estrutura de dados do MIT antes, e o professor que ministrou a palestra fez uma pergunta (não me lembro bem, mas foi isso que ele quis dizer): Já que os algoritmos não são mais importantes, por que ainda estamos aqui? E quanto à pesquisa? A resposta que ele deu foi “VELOCIDADE”. Buscamos velocidade assim como os pilotos de corrida buscam velocidade!
No desenvolvimento de muitos sistemas hoje em dia, a velocidade não é a primeira prioridade. Outros, como estabilidade, segurança, capacidade de reutilização, etc., são frequentemente considerados prioridade máxima. Hoje em dia, os padrões de design, a arquitetura de desenvolvimento, etc. não são projetados principalmente para resolver problemas de desempenho. Os itens acima são considerados por analistas e arquitetos. Pequenos programadores como nós só podem otimizar o programa em alguns pequenos locais do código, uma classe, um método e uma linha de código. Acho que é bom prestar mais atenção aos detalhes.
Ok, chega de bobagem, vamos falar sobre o assunto de hoje. A sobrecarga de desempenho de muitos sistemas de rede desenvolvidos agora está principalmente na leitura e transmissão de dados. Falarei sobre como melhorar o desempenho do .net nesse aspecto.
1. Paginação de dados na camada de dados. Pode ser implementado através de ExcuteReader ou procedimentos armazenados. Existem muitos métodos, então não vou entrar em detalhes (você pode ler o que escrevi)
2. Tente usar ExcuteReader para ler dados. PetShop 4.0, todos os dados podem ser acessados. Todos são implementados usando ExcuteReader, a menos que você tenha requisitos especiais para não conexão (como SmartClient, etc.).
3. Em situações não conectadas, usar DataTable tem melhor desempenho do que usar DataSet, a menos que você queira salvar múltiplas tabelas relacionais.
4. Use o método ImportRow de DataTable.
Em alguns casos, é necessário copiar uma grande quantidade de dados de um DataTable para outro. O uso do método ImportRow do DataTable pode melhorar bastante o desempenho. atinge mais de 10.000 linhas, pode ser significativamente melhorado e pode atingir várias vezes.
5. Serialize os dados em arquivos binários para facilitar a transmissão.
Quando processamos objetos DataSet e DataTable, podemos serializá-los em arquivos XML. Se forem transmitidos pela rede, os arquivos XML causarão problemas de recursos, como memória e largura de banda da rede. Neste momento, podemos serializá-lo em um arquivo binário, para que os arquivos gerados sejam bastante reduzidos. O código é o seguinte:
FileStream fs = novo fileStream(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,XMLData);
colse();
O arquivo binário gerado desta forma é chamado XMLBinary. Se você abri-lo diretamente com WINHEX, poderá ver algumas tags XML nele. Se a quantidade de dados for grande, adicione uma linha de código:
XMLData.RemortingFormat = SerializationFormat.Binary;
O arquivo gerado neste momento é chamado de arquivo TrueBinary. Ao processar um grande número (mais de 10.000 linhas), o tamanho do arquivo gerado é uma fração do XMLBinary. O esquema é salvo automaticamente durante a serialização, simplificando o processo de dessequenciamento. Ainda não sei quanto será a queda de desempenho da desserialização em comparação com a leitura direta do XML.
6. Faça uso razoável de pools de conexões.
O pool de conexões desempenha um grande papel na melhoria do desempenho e está ativado por padrão. O tamanho mínimo do pool padrão é 0, que geralmente é definido como um valor relativamente pequeno, como 5. O tamanho máximo do pool padrão é 100, o que é suficiente para a maioria dos sites WEB. Para sites grandes, aumente-o adequadamente.
7. Desenvolva usando SQLCLR
Se você está se concentrando em abrir a série SQL Server, você deve estudar SQLCLR. Ele é muito poderoso e pode melhorar o desempenho em muitas situações (especialmente em grandes aplicativos de nível empresarial).
8. Acesse APP.Config/Web.Config através de classes estáticas
Temos muitas informações de configuração em APP.Config/Web.Config, que são acessadas com muita frequência. Neste momento, criamos uma classe estática. Todos os atributos são acessados por meio da classe estática, o que pode melhorar o desempenho até certo ponto. A classe estática apenas instancia Config uma vez e APP.Config/Web.Config gerará muitas operações de IO.
classe estática pública MyWebConfig
{
MyWebConfig estático()
{
StringConn =
ConfigurationManager.ConnectionStrings["Conexão"].
Cadeia de conexão;
}
string estática pública DbConnectionString
{
pegar
{
retornar StringConn;
}
}
}
Ok, por hoje é isso. Gostaria de apontar quaisquer erros e deficiências. Você pode apresentar melhores opiniões e progredir juntos.