C#:线程工作负载和内存使用情况

时间:2011-12-22 11:20:16

标签: c# multithreading

Windows Taskmanger可以检查应用程序的CPU和内存使用情况,但在我们的程序中,我们有不同的线程,我们想知道每个线程上有多少ammount。

我们希望在运行时使用外部程序和应用程序本身进行检查。如果一个线程可以告诉他的内存和cpu使用情况会很棒。

4 个答案:

答案 0 :(得分:1)

以下是示例: 你有threadA和ThreadB。 ThreadA创建一个对象X. ThreadB使用此对象。 那么你想在线程的信息中看到什么?谁创建了对象或谁在使用它? 您唯一能看到的是使用线程AFAIK的CPU时间 而且我所知道的唯一一个在流程上显示MAX信息的程序是Process Explorer。 http://technet.microsoft.com/en-us/sysinternals/bb896653

答案 1 :(得分:0)

您可以使用性能监视器来查看为进程分配了多少内存,但是对于其中的单个线程,您看不到相同的内容。

但是,您可以创建自定义performance counters以在代码中显示要监控的任何值。

答案 2 :(得分:0)

SysInternals Process Explorer有此功能,请检查this Server fault thread

CodeProject上有一个开源项目,截图看起来很有希望:How to get CPU usage of processes and threads,但是演示项目似乎在Win7上崩溃(可能缺少一些权限)。

[编辑] 如果您想自己编写,可以P / Invoke Thread32FirstThread32Next函数枚举单个进程中的线程,然后使用{ {3}}查询每个线程的CPU时间。

答案 3 :(得分:-1)

对象在线程之间共享,线程不拥有对象。

对象的内存分配在堆上,该堆位于应用程序的范围内。任何线程都可以在应用程序的生命周期内随时访问任何内存。

无法确定哪个线程正在使用任何内存块或正在使用任何内存块。

线程执行工作单元。除非您知道哪个线程将运行哪个工作单元,否则您将无法获得CPU使用率的可靠指标。如果您确实知道哪个线程将执行哪些任务,则SysInternals的Process Explorer具有此指标。