我正在尝试测量处理器时间和数量。用于执行工作流的总内存。
这是我的设置:
我有一个调用WCF服务的ASP.NET应用程序。
WCF服务执行几个方法,然后使用WorkflowApplication类的Run方法调用与之关联的工作流。
我一直在使用“处理”类别中的性能计数器来获取有关处理器时间百分比,所用总内存的数据。
正如您所想象的那样,因为它是执行工作流的Web服务,所以所有工作流都在w3wp进程下运行。
如何捕获每个工作流而不是流程的性能计数器信息?
另外,我很感激任何关于为什么这种方法(捕获处理器时间和每个工作流使用的内存)本身不必要的指针/评论:)
注意:我不想使用System.GC命名空间在Activity中编写代码来获取所使用的总字节数。
答案 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;