我目前正在C#类库上进行开发,您可以在其中测量一些基本性能指标,例如cpu使用率或内存使用率。
实际上,我仅使用静态类和方法来实现它,因为我使用PerformanceCounter类来测量cpu,内存等。
我几乎可以在使用Tasks的同时测量此值,但只能使用静态方法来给出结果测量列表。
我的问题是此实现不是那么干净,也不是真正面向对象的。因为在此之后,我等待所有任务完成Task.WaitAll
(任务集合)。然后,我用此测量值计算平均值,最小值,最大值...,然后再次开始进行此测量,但要使用旧的平均值,最小值,最大值...作为比较。之所以中断测量过程,是因为我将测量结果写入文件,并且当我让任务以自己的方式运行并让任务直接写入文件时,测量的顺序并不总是相同的。 >
无论如何,有没有要处理的对象。例如:
public class MeasuringUtils {
public List<Measurement> Measurements {get; set;}
public double Average {get; set;}
public double Min {get; set;}
public double Max {get; set;}
//this should be a method used by a task and should be threadsafe
public void StartMeasuring(int duration, int interval){
//this is PSEUDO CODE
Measure the CPU
if new min set min, if new max set max, calculate average
Write Measurements to Measurement Collection
}
然后此代码可再次与此类的多个对象一起运行。
我的问题也许听起来有些奇怪,但是您对这个编码问题以及如何用任务和对象解决有什么建议吗?
感谢您的帮助!