none
Classe Process - Timer ou evento para ler a saída - Qual usa menos memória e processamento? RRS feed

  • Pergunta

  • Olá a todos, estou desenvolvendo um programa que funciona de maneira muito simples; Ele pega os dados que o usuário coloca em caixas de texto, e monta argumentos para iniciar um programa que funciona em modo texto. Até agora, deu tudo certo, ele inicia o programa, e eu consigo ler a saída dele, fazer o tratamento da saída e mostrar para o usuário. Minha dúvida mesmo é quanto ao uso de processamento e memória, quando eu comecei a cria-lo, eu usei um Timer para chamar os métodos que tratam a saída do processo, mas recentemente eu li mais a respeito da Classe Process, e vi que ela tem um manipulador de evento pra isso; o OutputDataReceived. E agora eu estou muito em dúvida se eu deixo o Timer fazendo a chamada dos métodos a cada 1 segundo, ou se uso o manipulador de evento da Classe. Qual vai gastar menos memória e processamento?
    • Editado Cliffinho domingo, 21 de agosto de 2016 16:20 correção ortográfica
    domingo, 21 de agosto de 2016 16:17

Respostas

  • Olá!

    Entendi.. Para ter certeza, só medindo o tempo de execução e consumo de memória.. Porém, eu imagino que essa implementação com o Timer quase que com certeza estará consumindo pelo menos mais processamento, por estar checando o StandardOutput a cada 1 segundo, uma vez que o evento da classe Process só seria disparado realmente quando a saída estivesse disponível..

    Agora, até que ponto valeria a pena fazer a alteração para utilizar o evento OutputDataReceived, é você que tem que dizer.. Se esse não é um aplicativo de missão crítica e o ambiente não tem recursos escassos, não vejo muito sentido alterar esse código que já está funcionando, correndo o risco de causar algum problema no processo..


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    quarta-feira, 24 de agosto de 2016 08:57
    Moderador

Todas as Respostas

  • Olá!

    Não consegui entender para quê você está utilizando um Timer na sua aplicação.. Será que você poderia explicar melhor? Se possível com o trecho de código onde você utiliza o Timer?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    terça-feira, 23 de agosto de 2016 13:52
    Moderador
  • Pois bem André, como eu disse no post, o único motivo de eu usar um Timer, é que eu não sabia a existencia desse manipulador de evento da classe Process. Más o que o Timer faz é o seguinte:

    private void obterSaida_Tick(object sender, EventArgs e) {
        obterNomeVideo(process1.StandardOutput.ToString());
        obterTempoRestante(process1.StandardOutput.ToString());
        obterVelDownload(process1.StandardOutput.ToString());
        obterTamanhoVIdeo(process1.StandardOutput.ToString());
    }

    O que ele faz no evento Tick é chamar outros métodos, passando como argumento a saída do processo, e nessas funções eu só trato a string e altero umas Labels no form com essas informações. Mas o que eu queria saber é se isso gasta mais memória ou processamento em relação ao evento da classe Process (OutputDataReceived).

    quarta-feira, 24 de agosto de 2016 01:22
  • Olá!

    Entendi.. Para ter certeza, só medindo o tempo de execução e consumo de memória.. Porém, eu imagino que essa implementação com o Timer quase que com certeza estará consumindo pelo menos mais processamento, por estar checando o StandardOutput a cada 1 segundo, uma vez que o evento da classe Process só seria disparado realmente quando a saída estivesse disponível..

    Agora, até que ponto valeria a pena fazer a alteração para utilizar o evento OutputDataReceived, é você que tem que dizer.. Se esse não é um aplicativo de missão crítica e o ambiente não tem recursos escassos, não vejo muito sentido alterar esse código que já está funcionando, correndo o risco de causar algum problema no processo..


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima

    quarta-feira, 24 de agosto de 2016 08:57
    Moderador
  • Compreendo, realmente tenho que verificar isso, mas obrigado pela ajuda.
    quarta-feira, 24 de agosto de 2016 15:25