none
Iniciar conexão com o banco mais rápido? RRS feed

  • Pergunta

  • Bom dia,
    pessoal.

    Não sei se deveria postar neste fórum, mas se estiver errado podem mudar para outro fórum!

    Minha dúvida é como posso melhorar o acesso ao banco de dados SQL Server 2005 da minha aplicação em C# 2.0?
    Pois sempre na 1ª vez, que a aplicação irá conectar com o banco, demora pelo menos uns 8 segundos para se conectar. Depois se eu voltar a fechar e abrir a aplicação novamente, já conecta instantaneamente.

    Abraço,
    Marcelo Tamanini
    terça-feira, 3 de fevereiro de 2009 12:26

Respostas

  • Marcelo,

        Verifique se você não habilitou a opção auto-close on. Porque realmente o SQL na primeira utilização ele tem que "criar" a conexão. Depois disso, o ADO.NET cria o pool de conexões e fica mais rápido. Ou então, se você costuma parar o serviço do SQL (como por exemplo desligar o servidor durante a noite) fará com que a primeira execução fique mais lenta...

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    terça-feira, 3 de fevereiro de 2009 13:06
    Moderador
  • Bom dia colegas!

    Acredito que o Roberto esteja certo ao falar do pool e o Ado.Net.

    Também estou fazendo uma aplicação em C# + SQL Server Express e essa demora na primeira abertura do banco acontece, tanto no trabalho como em casa.

    Assim, me parece ser normal tal acontecimento.

    Abraços!
    Jeferson Ferreira http://letrasdemusicas.webng.com
    • Editado Jeferson Ferreira quarta-feira, 4 de fevereiro de 2009 13:06 nome errado
    • Marcado como Resposta Gabriel Marquez segunda-feira, 2 de março de 2009 14:40
    quarta-feira, 4 de fevereiro de 2009 13:03

Todas as Respostas

  • Marcelo,

    Realmente este é um procedimento padrão de acontecer em qualquer aplicação desenvolvida independente da linguagem, basicamente o sistema operacional executa qualquer aplicativo de forma mais demorada na primeira execução que ocorre, nas próximas o sistema operacional já sabe os endereços físicos de acesso ao executável como também as portas de comunicação e endereços de memória que o mesmo deverá ocupar.

    Não tenho certeza se este tipo de procedimento pode ser melhorado, acredito que poderiamos realizar algum tipo de pesquisa para ver se encontramos mais detalhes.

    Mas basicamente é isso!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 3 de fevereiro de 2009 12:31
  • É o que eu imaginava. 
    Mas o que a grande maioria faz para esses casos?
    Faz uma Splash Screen enquanto está conectando com o banco?
    Quando eu trabalhava com VB6 e Access, não utilizava Splash Screen pelo fato que mesmo na 1ª vez que ia executar, a conexão com o banco era rápido, mas já com o SQL Server é nítido a demora. Chega parecer que travou a aplicação, pois nem aparece o cursor.
    Abraço,
    Marcelo Tamanini
    terça-feira, 3 de fevereiro de 2009 12:53
  • Marcelo,

        Verifique se você não habilitou a opção auto-close on. Porque realmente o SQL na primeira utilização ele tem que "criar" a conexão. Depois disso, o ADO.NET cria o pool de conexões e fica mais rápido. Ou então, se você costuma parar o serviço do SQL (como por exemplo desligar o servidor durante a noite) fará com que a primeira execução fique mais lenta...

    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    terça-feira, 3 de fevereiro de 2009 13:06
    Moderador
  • Roberto,

    É verdade o Auto-Close, pode influenciar!!!

    Se o auto-close estiver habilitado o SQL Server necessidade de mais alguns segundos para fazer a abertura do banco.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 3 de fevereiro de 2009 13:11
  • E onde verifico essa opção do Auto-close?
    Quanto sobre parar o serviço, na verdade é desligado o micro no fim do expediente.
    Abraço,
    Marcelo Tamanini
    terça-feira, 3 de fevereiro de 2009 13:40
  • Bom Dia,

    Você pode desabilitar a opção AutoClose On rodando o comando abaixo:

    ALTER DATABASE Banco SET AUTO_CLOSE OFF 

    Seguindo a linha do Roberto, acredito que seja a causa da lentidão. Desconheço uma razão para que a primeira conexão seja mais lenta por padrão. DNS, resolução de nomes, etc até podem retardar o processo, mas ainda assim não se justifica uma demora de 8 segundos. Como você mesmo disse, no VB 6 já era mais rápido na própria conexão. Você poderia postar a string de conexão ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 3 de fevereiro de 2009 14:04
  • Olá Gustavo.

    Verifiquei aqui e o auto close já estava OFF.

    No VB6 acredito que era mais rápido porque sempre utilizei o Access nas minhas aplicações. rsrs

    Pelo que testei aqui, parece que essa demora é algo normal do SQL Server, isso acontece inclusive no Management Studio. Tanto se eu me conectar ao SGBD através do Management Studio pela 1ª vez, ele também demora alguns segundos para conectar e nisso se eu for me conectar pelo meu aplicativo já conecta instantaneamente, mesmo que seja a 1ª vez que eu esteja abrindo o aplicativo, pois já houve uma conexão com SGBD através do Management Studio. Isso também acontece ao contrário!
    Essa demora de 8s vária de acordo com o micro pelo jeito, pois em um micro aqui demorou uns 4s e em outro 5s!
    Abraço,
    Marcelo Tamanini
    terça-feira, 3 de fevereiro de 2009 16:18
  • Marcelo,

         Uma solução (prática recomendada) é você não desligar o micro no final do expediente.
    MCT / MCITP - Database Administrator MCITP - Database Developer 2008
    terça-feira, 3 de fevereiro de 2009 16:52
    Moderador
  • Já me falaram isso, mas infelizmente o pessoal aqui prefere desligar. E sei, que temos clientes que fazem a mesma coisa.

    Acho que a melhor maneira vai ser utilizar Splash Screen pelo jeito.

    Quanto a string de conexão, segue abaixo:

    "Data Source=localHost; User ID=***; Password=****;Initial Catalog= aquapur";




    Abraço,
    Marcelo Tamanini
    terça-feira, 3 de fevereiro de 2009 17:12
  • Boa Noite,

    Por um acaso você está utilizando o SqlConnection ou o OleDBConnection no C# ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 3 de fevereiro de 2009 20:46
  • Bom dia,
    Gustavo.

    Utilizo SqlConnection.
    Logo que eu me conecto já faço a validação de usuário:

    SqlConnection
    scnUsuario = new SqlConnection(Dados.StringDeConexao);
    SqlCommand scmUsuario = new SqlCommand("STP_AutenticaUsuario", scnUsuario);
    scmUsuario.CommandType =
    CommandType.StoredProcedure;


    Abraço,
    Marcelo Tamanini
    quarta-feira, 4 de fevereiro de 2009 10:16
  • Olá Marcelo,

    Ainda não encontrei uma explicação para que demore tanto (deve haver mais alguma coisa) na primeira tentativa, pois, 8 segundos é muito tempo (ainda mais para uma conexão local). Talvez seja porque o usuário esteja tentando logo após inicializar o Windows e alguns processos o tornem mais lento.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com
    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 4 de fevereiro de 2009 10:40
  • Bom dia colegas!

    Acredito que o Roberto esteja certo ao falar do pool e o Ado.Net.

    Também estou fazendo uma aplicação em C# + SQL Server Express e essa demora na primeira abertura do banco acontece, tanto no trabalho como em casa.

    Assim, me parece ser normal tal acontecimento.

    Abraços!
    Jeferson Ferreira http://letrasdemusicas.webng.com
    • Editado Jeferson Ferreira quarta-feira, 4 de fevereiro de 2009 13:06 nome errado
    • Marcado como Resposta Gabriel Marquez segunda-feira, 2 de março de 2009 14:40
    quarta-feira, 4 de fevereiro de 2009 13:03