Wagner Andrade / 17 posts / 29 comments / feed / comments feed

Ruby Snapshot #5: Cronometro de código

Não é muito difícil de perceber que estou um pouco afastado do blog nas ultimas semanas. O motivo é sempre o mesmo: falta de tempo. Pra dizer a verdade acho essa uma desculpa esfarrapada, mas como a maioria dos seres humanos, gosto de utilizá-la.

Para retomar os artigos de códigos rápidos e úteis - nem sempre tão úteis - utilizando Ruby (os Snapshots) vou mostrar como fazer um “cronometro” de código. Calma, vou explicar melhor.

Antes de iniciar quero lembrar a existência do modulo Benchmark, que é o mais indicado a ser utilizado neste caso. Levamos em conta então que esse post servirá apenas para estudo.

Muitas vezes quero saber quanto tempo um determinado trecho de código leva para ser executado, assim posso fazer otimizações bem focadas em determinadas linhas.

Ruby é uma linguagem que torna simples a manipulação de blocos de código, por isso criaremos um método que receberá um determinado código que alem de executar essas instruções passadas dirá quanto tempo levou para fazer isso. Seu funcionamento é bem simples, mostrando apenas o tempo real que o código levou para ser executado, não é 100% preciso, mas em linhas gerais é bem eficiente. Segue o método:

Primeiro ele verifica se foi passado o bloco de código que vai ser “analisado”. Em seguida o tempo inicial é armazenado, o código é executado (yield) e por fim diminui-se o tempo inicial do tempo no momento em que o código termina de ser executado. É impresso na tela a identificação do teste (para os casos de haver mais de um) junto com o tempo que o código levou para ser executado, em segundos.

Para testar o método usei o sleep, que faz uma interrupção no código durante um determinado tempo, no caso 318 milissegundos. Ao rodar esse teste é possível notar que nunca dá 318 milissegundos no bechmark. Isso porque os métodos sleep e o bechmark não são exatos.

É possível fazer diversas melhorias nesse método, o que é um bom exercício para estudar a linguagem. Qualquer sugestão é bem vinda.

No comments

Deixe um comentário