none
Problema sério de performance em meu site publicado RRS feed

  • Pergunta

  • Esse é meu cenário atual:

    1)Desenvolvi um sistema simples e pequeno(ainda em desenvolvimento). Alguma coisa eu uso o DataReader, principalmente quando uso nos inserts no BD e uso algumas pesquisas com LINQ e Entity. A hospedagem desse meu site, está em um servidor Windows Server 2008 R2, dentro da empresa em presto serviços. Não é lá um servidor parrudo e o link não é lá grande coisa. Bem, essa é minha infra.

    2)O problema se dá assim. Quando os funcionários tentam inserir qualquer coisa, seja uma Triagem, um Cadastro, um Subsídio ou outra coisa, às vezes ele grava normalmente. Porem sempre após umas gravações, ele fica lento, com a setinha do browser(Chrome) rodando,rodando e não grava nada. Às vezes da erro Aplicação(às vezes). Existe alguns momento em que quando esvaziamos o cache do browser(Ctrl-F5) funciona, mas outras vezes não. Aí tem que fechar o aplicativo e logar novamente. Isso é "partoso" demais, improdutivo e deixa meu aplicativo sem confiança, apesar de estarmos começando a realizar os primeiros testes sei que problemas acontecem, mas sempre tem aqueles que não creem nisso e tem poder de decisão. Então, aceito qualquer sugestão de como melhorar isso ou até mesmo trocar alguma coisa caso seja necessário. Obrigado desde já.

    terça-feira, 16 de abril de 2013 14:10

Todas as Respostas

  • Verifique se todas as suas operações de CRUD principalmente as que envolve o DataReader estão sendo fechadas e liberadas da memoria : Exemplo:

    //imagine que há uma conexao , um  command e datareader 
    
    //Normalmente usamos o bloco try catch e finally onde no finally fechamos tudo exemplo 
    
    
    public List<Pessoa> Listar()
    {
    
    SqlConnection cn = new SqlConnection("Conexao")
    SqlCommand cmd = new SqlCommand();
    SqlDataReader R = null;
    Pessoa P = null;
    List<Pessoa> lstPessoa = new List<Pessoa>();
    
     try
    {
    
    cn.Open();
    cmd.Connection = cn;
    cmd.CommandType = CommadType.Text;
    cmd.CommandText = "select nome,idade from pessoas";
    R = cmd.ExecuteReader();
    
    while(R.read)
    {
    P = new Pessoa();
    P.nome = R["nome"];
    P.idade = Convert.ToInt32(R["idade"]);
    
    lstPessoa.Add(P);
    
    P = null;  
    
    }
    
    }
    catch(Exception ex)
    {
    
    throw new Exception(ex.Message);
    }
    finally
    {
    
    // Aqui é o segredo
    // Ou seja é limpado da memória isso é uma boa prática
    
    R.Dispose();
    R = null;
    cmd.Dispose();
    cmd = null;
    cn.Close();
    cn.Dispose();
    cn = null;
    
    }
    
    return lstPessoa;
    
    
    }

    Outro boa prática é Implementar a Interface IDispose() e nela você pode testar os objetos também fazendo a assim a liberação deles . Analise isso . Espero ter ajudado.

    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br


    • Editado Davi Murilo terça-feira, 16 de abril de 2013 14:51
    terça-feira, 16 de abril de 2013 14:50
  • Fiz tudo isso e agora estou esperando alguém da produção vir testar. Caso não tenha dado o problema, estarei encerrando o tópico.
    terça-feira, 16 de abril de 2013 16:52
  • Ok ficamos no aguardo.

    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    terça-feira, 16 de abril de 2013 16:56
  • Então, fiz tudo isso, peguei um cara para fazer os testes e ele me disse que continua. Veja só o que ele me disse. Digo ele, pois em minha máquina(desenvolvimento) não tenho esse problema, mas também eu não fico fazendo inserts, pois para nós desenvolvedores, nos preocupamos em testar funcionalidade, testes de stress, tem ou deve ter pessoas para isso. Ele disse assim, que quando às vezes ele dá gravar ou abre o aplicativo, fica demorando uma eternidade, mas qdo ele dá um Ctrl+F5(limpeza de cache e refresh) aí funciona, mas ficar dando Ctrl+F5 toda vez, não pode, pois sempre limpa o que foi escrito e tem que digitar outra vez tudo. É IMPRODUTIVO.

    Não sei, sinceramente o que fazer.

    quarta-feira, 17 de abril de 2013 12:32
  • Estou tentando melhorar, mas ainda assim está ruim. Toda vez que se grava alguma coisa, fica o browser rodando,rodando,rodando e nada. Aí damos um F5, limpa tudo mas vai. Antes de eu colocar a trava, às vezes, digo às vezes ele gravava após o F5 e isso fazia gravar duas vezes. Agora pus uma trava e isso não acontece mais, mas continua improdutivo, extremamente lento. Alguém arrisca um palpite?
    quinta-feira, 18 de abril de 2013 20:04
  • Levando em conta que sua Infraestrutura esta "boa" (rede e servidor), você já verificou se o banco de dados está com desempenho. Você quando publicou sua aplicação alterou para false debug no web.config

    <compilation debug="false" targetFramework="4.5">

    Você pode remover Modulos ASP.NET que não está ultilizando. Veja exemplo

     http://madskristensen.net/post/Remove-default-HTTP-modules-in-ASPNET.aspx

    http://titancms.com/KB/ImprovingPerformanceHTTPPipelineConfiguration.htm


    quinta-feira, 18 de abril de 2013 21:28
    Moderador