Pular para o conteúdo principal

MEMUSG - Memory Usage

How to inspect the total of memory used by a specific program with C#.

Versão em português

I’m a crazy guy when I’m using a computer. I am very dissatisfied with the current programs, moreover with their memory consumption. Recently, I got insane when my system starts to slow down and I realized that my browser was using more than 3GB of RAM. Important information about: there was just 4 tabs open!

Well, despite that craziness, I also need to inspect the performance of some of my job applications and I needed to get a memory consumption summary.

For example: in some Windows versions, there isn’t a simple way to show the total of memory that an application like Google Chrome is using.

If you inspect the Task Manager application, you will see few memory consumption in first look, but, when you scroll down the list, you realize that there is even more process related with Google Chrome with more memory consumption that you’ve saw on the top of the list.

Therefore I decided to do a little research and try to make up a console application that I pass the name of the program or the process as a parameter and can get the total of RAM that is being used by it. In the end of this post, I put the original link where that post was based on.

This post article is that you can use the Windows command prompt (aka cmd.exe) to run the program and get the total memory used by a procces.

In the code below I show how the memusg.cs works.

using System; using System.Diagnostics; public static class memusg { static void Main(string[] args) { if(args == null || args.Length == 0) { Console.WriteLine("Usage: memusg <process name>"); return; } getallmemoryusage(args[0]); } private static void getallmemoryusage(string pName) { double f = 1024.0; Process[] localByName = Process.GetProcessesByName(pName.ToLower()); decimal max = 0m; foreach (Process p in localByName) { max += (decimal)(p.PrivateMemorySize64 / f / f); } Console.WriteLine("Total private memory usage: {0:N0} MB", max); } }

The main target of that code is to find out for the process or program sent as argument and sum the private memory use (in MB) of all the process with same name printing the final value on the console.

That feature it’s executed on the getallmemoryusage() method that receive the process name as argument.

To start it’s necessary crate an double object to express the total amount of memory used in megabytes that will by used as a divisor.

The localByName object stores the process list got by the Process class.

Note that you must include the System.Diagnostics namespace in your using clauses to can use the Process class.

Moving on there is a loop where the process list is read and all the process with the argument name have its memory usage added to the “max” variable. The value is already stored in MB using the division mentioned above.

That’s it! And you? What is your craziness with the modern programs?

LINKS

  1. Post Original no MSDN
  2. Classe System.Diagnostics.Process

Postagens mais visitadas deste blog

Como gerar scripts para exportar dados no SQL Server 2008

Uma das tarefas mais comuns no trabalho com desenvolvimento de software que consome dados em bancos como o SQL Server 2008 é a necessidade de em algum momento precisarmos exportar os dados de um banco para outro. Quer seja para realizar testes ou fazer simulações existem várias maneiras de se fazer isto. Neste post eu quero demonstrar um recurso do SQL Server Management Studio (SSMS) que permite realizar esta tarefa rapidamente.Para os que estão acostumados a usar esta ferramenta, já devem saber que é possível gerar scripts para o schema e também transferir os dados entre dois bancos distintos. Isto pode ser feito se o SSMS puder conectar-se com as duas bases, de origem e destino. No exemplo que vou dar, o objetivo é gerar o script apenas para uma tabela do banco de dados de exemplo da Microsoft – Northwind.1. Iniciando o assistenteO assistente deve ser iniciado clicando com o botão direito do mouse sobre o banco onde se encontra a tabela a qual iremos gerar o script. Deve se clicar n…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…