如何衡量工作流消耗的处理器时间和总内存的百分比?

时间:2012-01-04 06:09:40

标签: c# .net wcf workflow-foundation workflow-foundation-4

我正在尝试测量处理器时间和数量。用于执行工作流的总内存。

这是我的设置:

我有一个调用WCF服务的ASP.NET应用程序。

WCF服务执行几个方法,然后使用WorkflowApplication类的Run方法调用与之关联的工作流。

我一直在使用“处理”类别中的性能计数器来获取有关处理器时间百分比,所用总内存的数据。

正如您所想象的那样,因为它是执行工作流的Web服务,所以所有工作流都在w3wp进程下运行。

如何捕获每个工作流而不是流程的性能计数器信息?

另外,我很感激任何关于为什么这种方法(捕获处理器时间和每个工作流使用的内存)本身不必要的指针/评论:)

注意:我不想使用System.GC命名空间在Activity中编写代码来获取所使用的总字节数。

2 个答案:

答案 0 :(得分:2)

有关于执行工作流程数的perfmon计数器,但没有关于实际CPU和内存使用情况的计数器。工作流通常是长时间运行并且空闲并且大部分时间都保持在磁盘上,因此跟踪CPU /内存使用情况几乎没有意义。也就是说,有些时候他们很忙,正在做事情,你可能很容易在那里出现内存泄漏,导致一段时间后出现问题。

一般情况下,我倾向于选择Workflow Services,在这种情况下,我可以将它们放在IIS中的单独应用程序池中,这样我就可以跟踪该特定应用程序池的CPU /内存使用情况。但是,当您使用的WorkflowApplication不是您的选项时,您将不得不求助于Red Gate ANTS Performance Profiler之类的分析器。非常适合开发使用,但不太适合监控生产应用程序。在这种情况下,您需要开始为自己的活动添加检测。

答案 1 :(得分:0)

我认为最简单的方法是在分开的System.Diagnostic.Process

中运行每项活动
var process = System.Diagnostics.Process.Start (
    "MyWorkflowApplication.exe", 
    "c:/My workflow service.xaml"
);

long memory = process.PagedMemorySize64;
TimeSpan processorTime = process.TotalProcessorTime;