views:

909

answers:

2

I know in perfmon you can see how much each core is utilized, and how much total CPU a particular process is using. However I can't seem to find a way to see how much CPU a process is using broken down by cores.

Is there a built-in way to see this information? Is there a programmatic way to see this? (C# preferred) Am I demonstrating a misunderstanding of how Windows (Vista) handles core usage and context switching by asking this question?

Edit: More clarification of what I want to find out. Is my process only using 30-40% total CPU (on a quad core) because it's not sufficiently multi-threaded to utilize more or is it because it's too I/O bound and disk access is the bottleneck?

So is there no way to do this at all? (other than make sure there's no other CPU activity going on on the computer)

+1  A: 

Process Explorer at least can show you the threads of a given process and how much CPU those are using. Maybe you can get the core/cpu on which the threads are running somehow and then just add up. I have not much WinAPI experience, though. So maybe processor affinity can only be queried on processes.

Joey
+1  A: 

You can't directly get the per-processer cycle times for a given process, but you can estimate it over time with QueryIdleProcessorCycleTime (as it returns idle times for all logical processors, i.e., cores) and QueryProcessCycleTime and assuming that it is the only non-idling process running.

MSN
lol, hard to get my process to be the only non-idle process when running in Vista, so much background noise
Davy8