none
Lentidão para excluir registro RRS feed

  • Pergunta

  • Uso VS2010, asp.net, c# sqlserver2008

    A aplicação está funcionando, o banco tem apenas 6 mil registro, e hospedado em um servidor online, cada registro tem diversas ligações, e para excluí-lo, preciso remover essas ligações como abaixo:

     if (registroFinanceiro.Historico != null)
                        {
                            registroFinanceiro.Historico.RegistrosFinanceiros.Remove(registroFinanceiro);
                        }
    if (registroFinanceiro.Escola != null)
                        {
                            registroFinanceiro.Escola.RegistrosFinanceiros.Remove(registroFinanceiro);
                        }
    if (registroFinanceiro.Banco != null)
                        {
                            registroFinanceiro.Banco.RegistrosFinanceiros.Remove(registroFinanceiro);
                        }
    if (registroFinanceiro.Matricula != null)
                        {
                            registroFinanceiro.Matricula.RegistrosFinanceiros.Remove(registroFinanceiro);
                        }
    if (registroFinanceiro.CedenteSacado != null)
                        {
                            registroFinanceiro.CedenteSacado.RegistrosFinanceirosCedenteSacado.Remove(registroFinanceiro);
                        }
    if (registroFinanceiro.Aluno != null)
                        {
                            registroFinanceiro.Aluno.RegistrosFinanceiros.Remove(registroFinanceiro);
                        }  

    // PARA FINALMENTE EXCLUIR O REGISTRO

     this.acaoRegistroFinanceiro.Excluir(registroFinanceiro);
                        this.gerente.Salvar();

    ESTÁ REMOÇÃO DEMORA EM MÉDIA 25 SEGUNDOS, ISSO É NORMAL? COMO POSSO MELHORAR O DESEMPENHO DA EXCLUSÃO?


    Álvaro Luiz


    • Editado Álvaro Luiz segunda-feira, 6 de abril de 2015 11:58
    segunda-feira, 6 de abril de 2015 11:49

Respostas

  • Álvaro,

    Existem várias alternativas:
    - Utilizar Foreign Keys com CASCADE DELETE seria uma delas. Ao se remover o registro principal, todas as dependências são eliminadas em conjunto;
    - Montar uma procedure que faz a exclusão do registro e todas as suas dependências. Neste segundo caso, aconteceria uma única chamada ao banco de dados, reduzindo com certeza o tempo para a execução deste conjunto de operações.

    • Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 12:12
    • Não Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 12:16
    • Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 22:27
    segunda-feira, 6 de abril de 2015 12:10

Todas as Respostas

  • Álvaro,

    Existem várias alternativas:
    - Utilizar Foreign Keys com CASCADE DELETE seria uma delas. Ao se remover o registro principal, todas as dependências são eliminadas em conjunto;
    - Montar uma procedure que faz a exclusão do registro e todas as suas dependências. Neste segundo caso, aconteceria uma única chamada ao banco de dados, reduzindo com certeza o tempo para a execução deste conjunto de operações.

    • Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 12:12
    • Não Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 12:16
    • Marcado como Resposta Álvaro Luiz segunda-feira, 6 de abril de 2015 22:27
    segunda-feira, 6 de abril de 2015 12:10
  • Olá Renato

    Estou usando EF

    Essas operações são necessárias para remover as ligações entre os objetos gerenciados pelo Entity, mas que a exclusão de fato deve acontecer numa só tabela (e neste exemplo, um só registro)


    Álvaro Luiz

    segunda-feira, 6 de abril de 2015 12:17
  • Acredito então que o uso de Foreign Keys deva resolver o seu problema. Removendo o registro principal, os filhos seriam eliminados em conjunto.
    segunda-feira, 6 de abril de 2015 12:21
  • Outra sugestão e até lhe pergunto de quando foi a última vez que esta Máquina recebeu uma boa manutenção em seu Sistema?

    Use  o "CCleaner" para, além de limar o PC deleta fragmentos no Registro do Windows.
    Baixe e teste, verás que a lista de registros sem precisão está muito cheia aí aliviará o serviço do seu computador. Faça desfragmentação de disco para deixar o Windows  livre de fragmentos, unindo os arquivos deixando o Sistema mais veloz e retire os programas que desnecessariamente iniciam com o Windows (no MSCONFIG). Se desejar ainda baixar o "Revo Uninstaller" que além também de limar o Windows, tem uma excelente ferramenta de Excluir Evidências no Sistema, ou seja, deleta muitas pastas desnecessárias com seus arquivos, e verás o bom espaço de disco que ele libera, eu uso os dois para meus projetos e há anos!

    Execute sempre estas ações para não teres atrasos em seus trabalhos.

    Espero ter lhe ajudado


    MS INFORMATICA - Projeto Marinner

    segunda-feira, 6 de abril de 2015 12:26