Saturday, February 5, 2011

How can I get CPU usage and/or RAM usage of a *THREAD* in C# (managed code)?

I know how to get CPU usage and memory usage for a process, but I was wondering how to get it on a per-thread level. If the best solution is to do some P-Invoking, then that's fine too.

Example of what I need:

Thread myThread = Thread.CurrentThread;

// some time later in some other function...

Console.WriteLine(GetThreadSpecificCpuUsage(myThread));
  • Here's an example which does what you want http://www.codeproject.com/KB/system/processescpuusage.aspx

    Timothy Khouri : This is as close as I think we're going to get... thanks!
  • You can't get memory usage per thread because memory is shared between all threads in a process. How would the OS know whether you allocated memory in one thread and used it in another. And what would it mean?

    From erikkallen
  • As said, memory use cannot be answered since that is an attribute of the process as a whole, but CPU use:

    Process p = Process.GetCurrentProcess;
    foreach (ProcessThread pt in p.Threads)
    {
        // use pt.Id / pt.TotalProcessorTime / pt.UserProcessorTime / pt.PrivilegedProcessorTime
    }
    
    From jerryjvl

0 comments:

Post a Comment