none
Melhorar Performance RRS feed

  • Pergunta

  • Pessoal,

     

    Tenho a seguinte situação:

     

    1 banco de dados com mais de 600 mil registros contendo dados sobre o balanço, DRE das empresas. Este banco está estruturado da seguinte forma (dados padronizado pela CVM)

     

    Codigo da Empresa          Codigo da Conta              Descrição da Conta           31 12 2007       31 12 2008

    EMPR                               1.                                   ATIVO                              1000,00           1500,00  

     

    Preciso fazer uma serie de calculos para isso estou fazendo um bloco de comando com sqlconnector , sqlcommand e sqldatareader para ler os dados que preciso e fazer as contas, ou seja se tenho 10 contas pra fazer, tenho que fazer esse bloco 10 vezes pois preciso pegar as informação da Descrição da Conta.

     

    Qual seria a melhor forma de ganhar performande?

     

    exemplo

     

    //Dividentos Pagos

    SqlCommand SqlCmdDividendos = new SqlCommand("SELECT [31 12 2007 + "] as Dividendos FROM View_Balanco (NOLOCK) WHERE CODIGO = 'VALE' AND [DESCRIÇAO DA CONTA] = 'Dividendos a Pagar' AND [31/12/" + Ano[iano].ToString() + "] is not null", SqlConnection);

    SqlDataReader RecebeDadosDividendos = SqlCmdDividendos.ExecuteReader();

    if (RecebeDadosDividendos.Read())

    {

    Dividendos = Convert.ToDouble(RecebeDadosDividendos["Dividendos"].ToString());

    }

    RecebeDadosDividendos.Close();

     

    //Dados do lucro L¡quido

    SqlCommand SqlCmdBanlaco = new SqlCommand("SELECT [31 12 2007 + "] AS LUCRO FROM VIEW_BALANCO (NOLOCK) WHERE CODIGO = 'VALE' AND ([DESCRIÇAO DA CONTA] = 'Lucro/Preju¡zo do Exerc¡cio' OR [DESCRI€ÇO DA CONTA] = 'Lucro/Preju¡zo do Per¡odo') AND [31 12 " + Ano[iano].ToString() + "] is not null", SqlConnection);

    SqlDataReader RecebeDadosBalanco = SqlCmdBanlaco.ExecuteReader();

    if (RecebeDadosBalanco.Read())

    {

    Lucro = Convert.ToDouble(RecebeDadosBalanco["LUCRO"].ToString());

    }

    RecebeDadosBalanco.Close();

                  

    quinta-feira, 29 de janeiro de 2009 00:57

Respostas

  • Olá Luiz,

     

    Para o seu caso, recomendo fortemente o uso de [Stored Procedures], pois vai evitar desnessários [Round Trips] na rede.

     

    No seu exemplo acima, com uso de uma única Stored Procedure, vc faz [todos] os cálculos necessários, e retorna somente uma Tabela que contém [duas colunas], uma com o tipo de retorno (no seu exemplo acima temos "dividendo" e "lucro"), e a outra coluna com o [valor calculado].

     

    A Microsoft possui sites interessantes que nos ajudam neste respeito. Por exemplo, veja em [http://msdn.microsoft.com/en-us/library/ms998569.aspx#scalenetchapt12_topic11], capítulo [Improving ADO.NET Performance], as seguintes seções:

     

    - Stored Procedures
    - Use Stored Procedures
    - Using Parameters with Stored Procedures
    - Batch SQL Statements to Reduce Round Trips

     

    []

    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 18:28
    quinta-feira, 29 de janeiro de 2009 12:26
  • Olá,

     

    Claro de há desenvolvimentos que precisem de performance, como no seu caso. Mas recomendo a utilização do SDK:

    http://msdn.microsoft.com/en-us/library/bb928212.aspx

     

    Abraço,

     

     


    Ricardo Alves
    www.ricardoalves.me
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 18:30
    sábado, 13 de novembro de 2010 18:30

Todas as Respostas

  • Olá Luiz,

     

    Para o seu caso, recomendo fortemente o uso de [Stored Procedures], pois vai evitar desnessários [Round Trips] na rede.

     

    No seu exemplo acima, com uso de uma única Stored Procedure, vc faz [todos] os cálculos necessários, e retorna somente uma Tabela que contém [duas colunas], uma com o tipo de retorno (no seu exemplo acima temos "dividendo" e "lucro"), e a outra coluna com o [valor calculado].

     

    A Microsoft possui sites interessantes que nos ajudam neste respeito. Por exemplo, veja em [http://msdn.microsoft.com/en-us/library/ms998569.aspx#scalenetchapt12_topic11], capítulo [Improving ADO.NET Performance], as seguintes seções:

     

    - Stored Procedures
    - Use Stored Procedures
    - Using Parameters with Stored Procedures
    - Batch SQL Statements to Reduce Round Trips

     

    []

    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 18:28
    quinta-feira, 29 de janeiro de 2009 12:26
  • Olá,

     

    Claro de há desenvolvimentos que precisem de performance, como no seu caso. Mas recomendo a utilização do SDK:

    http://msdn.microsoft.com/en-us/library/bb928212.aspx

     

    Abraço,

     

     


    Ricardo Alves
    www.ricardoalves.me
    • Marcado como Resposta RicardoAlves sábado, 13 de novembro de 2010 18:30
    sábado, 13 de novembro de 2010 18:30