繁体   English   中英

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

[英]C# : Thread Workload and Memory useage

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

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

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

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

但是,您可以创建自定义性能计数器,以在代码中显示要监视的任何值。

SysInternals Process Explorer具有此功能,请检查此服务器故障线程

CodeProject上有一个开源项目,截图看起来很有希望: 如何获得进程和线程的CPU使用率 ,但是演示项目似乎在Win7上崩溃(可能缺少一些特权)。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM