2012-01-04 15 views
2

我正在尝试测量用于执行工作流程的总处理器时间量&。如何测量工作流程消耗的处理器时间和总内存百分比?

这是我的设置:

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

的WCF服务执行几种方法,然后调用使用WorkflowApplication类的Run方法与它相关的工作流程。

我已经使用性能计数器在“过程”类别被获得上的处理器时间的%的数据,使用的总存储器。

正如你所想象的,因为它是执行工作流中的Web服务,所有的工作流w3wp进程下运行。

如何去捕捉每一个工作流程,而不是过程中的性能计数器信息?

而且我会很感激(每个工作流程中使用摄像处理时间和内存)就证明这种方法的指针/评论本身是不必要的:)

注:我不想写的活动中码使用System.GC命名空间来获取所使用的总字节数。

+0

各有什么活动有关使用System.GC的跟踪参与者里面?有从追踪记录中获得执行活动的方法。我对traCing没有经验,它可能有用吗? http://msdn.microsoft.com/en-us/library/ff462013.aspx – 2012-01-04 11:02:42

回答

2

有关于工作流程执行,但不是实际的CPU和内存使用的数量性能计数器。通常工作流程长时间运行,并且大部分时间处于空闲状态并保存在磁盘中,因此在跟踪CPU /内存使用情况时没有多大意义。也就是说,有些时候他们很忙,正在做某些事情,而且很容易发生内存泄漏,导致一段时间后出现问题。

总的来说,我倾向于选择工作流服务,并在这种情况下,我可以把他们在IIS中一个单独的应用程序池,所以我可以跟踪CPU /内存用途为特定的应用程序池。但是,由于您使用的WorkflowApplication不适合您,因此您必须使用Red Gate ANTS Performance Profiler等分析器。非常适合开发使用,但不适合监控生产应用程序。在这种情况下,您需要开始为您自己的活动添加仪器。

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;