Posts com o tag ‘programming’

Como medir o uso da CPU utilizando Performance Counters

Segunda-feira, 4 de maio de 2009 por Fernando Hamasaki de Amorim

Na última semana no trabalho, dois desenvolvedores estavam procurando uma forma de recuperar a porcentagem de uso da CPU utilizando .NET. Eles encontraram uma solução utilizando Win32_Processor de WMI e classes do namesapce System.Management, escrevendo algo mais ou menos assim:

ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Processor");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

int load = 0;
int cpus = 0;

foreach (ManagementObject mo in searcher.Get())
{
    load += Convert.ToInt32(mo["LoadPercentage"]);
    numCpus++;
}

decimal cpuUsage = load / cpus;

Uma maneira mais fácil de fazer isso, e que atende ao propósito de medir recursos utilizados da máquina, é utilizar Performance Counters. Classes como PerformanceCounter e PerformanceCounterCategory, que são encontradas no namespace System.Diagnostics, lhe dão acesso não somente a informações do uso do processador, mas também informações sobre cachê de sistema, disco físico, memória, threads, entre outros.

O exemplo abaixo mostra como criar uma instância da classe PerformanceCounter para recuperar a porcentagem do uso da CPU naquele instante:

PerformanceCounter cpuCounter = new PerformanceCounter
{
    CategoryName = "Processor",
    CounterName = "% Processor Time",
    InstanceName = "_Total"
};

float cpuUsage = cpuCounter.NextValue();

Note que na propriedade CategoryName é informado “Processor”, a categoria referente ao processador da máquina, e na propriedade CounterName, o contador que se refere à porcentagem do tempo de processamento. Em algumas categorias de Performance Counter é necessário especificar o nome da instância do contador, através da propriedade InstanceName, como é o caso da categoria “Processor” do exemplo acima, onde está sendo utilizado a instância “_Total”. Na minha máquina, para a categoria “Processor”, também estão disponíveis as instâncias “0″ e “1″, que se referem aos dois núcleos do meu AMD Athlon™ 64 X2 Dual Core Processor 6000+.

Na categoria “Memory” não é necessário especificar o nome da instância. Veja abaixo o exemplo de como obter a quantidade de memória disponível:

PerformanceCounter ramCounter = new PerformanceCounter
{
    CategoryName = "Memory",
    CounterName = "Available MBytes"
};

float availableRam = ramCounter.NextValue();

Para recuperar todas as categorias disponíveis para medição, use o método GetCategories da classe PerformanceCounterCategory:

PerformanceCounterCategory[] categories;
categories = PerformanceCounterCategory.GetCategories();

A partir de uma categoria, você pode recuperar todas os nomes de contadores. Por exemplo, o código abaixo:

var category = new PerformanceCounterCategory("System");

foreach (PerformanceCounter counter in category.GetCounters())
{
    Console.WriteLine(counter.CounterName);
}

Gera a seguinte saída:

File Read Operations/sec
File Write Operations/sec
File Control Operations/sec
File Read Bytes/sec
File Write Bytes/sec
File Control Bytes/sec
Context Switches/sec
System Calls/sec
File Data Operations/sec
System Up Time
Processor Queue Length
Processes
Threads
Alignment Fixups/sec
Exception Dispatches/sec
Floating Emulations/sec
% Registry Quota In Use

Eu fiz duas aplicações console de exemplo utilizando Performance Counters:

  • Uma exibe a porcentagem de uso da CPU e a quantidade de MB de memória disponíveis, atualizando as informações a cada um segundo;
  • A outra lista todos os nomes de instâncias e contadores de algumas categorias.

Você pode baixar essas duas aplicações aqui.


Post original:
http://prodis.pro.br/2009/05/04/como-medir-o-uso-da-cpu-utilizando-performance-counters

.

10 maneiras de melhorar seu código, por Neal Ford

Sexta-feira, 24 de abril de 2009 por Fernando Hamasaki de Amorim

Vou aproveitar o embalo do post sobre Automatização para mostrar a palestra que Neal Ford apresentou na QCon San Francisco 2008 no último mês de novembro: “10 Ways to Improve Your Code”.

São elas:

  1. composed method
  2. test-driven development, test-driven design
  3. static analysis
  4. good citizenship
  5. yagni: you ain’t gonna need it
  6. question authority
  7. slap: single level of abstraction principle
  8. polyglot programming
  9. every nuance
  10. anti-objects

Você pode assistir à palestra no site da InfoQ:
http://www.infoq.com/presentations/10-Ways-to-Better-Code-Neal-Ford

Baixe também os slides da apresentação em PDF neste endereço:
http://qconsf.com/sf2008/file?path=/qcon-sanfran-2008/slides//NealFord_10_Ways_to_Improve_Your_Code.pdf


Post original:
http://prodis.pro.br/2009/04/23/10-maneiras-de-melhorar-seu-codigo-por-neal-ford

.

Why Perl

Terça-feira, 21 de outubro de 2008 por otavio.fernandes

Há alguns anos atrás eu precisava de uma boa ferramenta para concentrar anti-spam, anti-vírus, e muitas outras funções, dentre as possíveis escolhas eu elegi o Amavisd-new, por ser um projeto maduro e com referencias fortes. E, em um determinado momento eu estava cercado por situações nas quais eu não encontrava saída, mesmo nas listas de discussão e documentação, então, senti-me “obrigado” a ler os fontes. Inicialmente foi uma das piores experiências da minha vida, o software é todo escrito em Perl (claro!) e na época tinha mais de 18 mil linhas de código… Porem, foi também, uma das melhores oportunidades da minha vida profissional! Vou explicar o porque.

Para quem não tem muita experiência com a linguagem, Perl é um tanto quanto complicado, pois tem uma estrutura bastante diferenciadas e utiliza elementos que não são auto-explicativos. Ou seja, sem conhecer a linguagem eu não poderia entender como aquele software trabalha.

Comecei então a procurar um bom artigo ou tutorial sobre introdução e na maioria deles eu era redirecionado às manpages. Na época me parecia estranho aprender uma linguagem de programação através de suas manpages, pois eu nunca havia pensado nisso. No entanto, segui o conselho e comecei: “$ perldoc perl”. Devo admitir, tudo o que você precisa, quer ou terá necessidade estão em suas manpages, e todo o conteúdo está mais do que bem explicado, cheio de exemplos e textos adicionais. Sem dúvida, as manpages do Perl são mais do que suficientes.

Perl é uma linguagem extremamente poderosa e madura, criada por Larry Wall em 1987 com o enfoque de ter recursos para processamento de texto, foi principalmente influenciada por C, Shell Script, AWK, Sed e Lisp, hoje, Perl encontra-se na versão 5.10, e está presente em quase todas as plataformas.

Afinal, Porque Perl?

  • Com mais de 20 anos de idade esta linguagem está mais do que consolidada no mercado, hoje é praticamente impossível ver um sistema operacional unix-like sem o seu interpretador, e mais, sem ter dezenas de scripts para as mais variadas funções, escritos em Perl;
  • É o canivete-suíço das linguagens de programação pois, comprovadamente, é flexível e adaptável;
  • Sua sintaxe é inspirada em linguagem C (ANSI), então, é simples, direta e prazerosa de escrever;
  • Reúne as listas de Lisp, os Arrays Associativos do AWK e as Expressões Regulares do Sed, ou seja, o melhor destes mundos com inúmeras outras inovações;
  • Também suporta estrutura de dados complexas, First Class Functions (construção de novas funções em tempo de execução), Closures, Orientação a Objetos, bem como a mistura de vários paradigmas, fica a critério do programador, e muito muito mais;
  • Toda a liberdade ao desenvolvedor, possibilitando escrever instruções complexas em poucas linhas de código (quanto menos linhas de código menos bugs);
  • É rápido e produtivo, pois provê ao programador todas as ferramentas necessárias para colocar os seus anseios em prática;
  • “There is more than one way to do it”;
  • CPAN, um repositório com milhares de módulos Perl, largamente utilizados, e conseqüentemente, testados pela comunidade;
  • Liberdade. Não te prende à burocracia, e subentende de que o desenvolvedor tem consciência do que faz e quer liberdade para isso;
Porem é necessário deixar claro que Perl é uma linguagem voltada às soluções e meios para atingir os objetivos, e, não necessariamente voltada a quem vai desenvolver estas soluções, ou seja, ela vai exigir dos programadores conceitos e disciplina, na minha opinião, isso é muito bom nos dias de hoje.

Links:


Switch to our mobile site