DirectOutputR1
DirectOutput framework R1 for virtual pinball cabinets.
Go to:
Overview 
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros Pages
TimeSpanStatisticsItem.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using DirectOutput.General.Generic;
6 
7 namespace DirectOutput.General.Statistics
8 {
10  {
11  private DateTime StartTime=DateTime.MinValue;
12 
13  public void MeasurementStart()
14  {
15  StartTime = DateTime.Now;
16  }
17 
18  public void MeasurementStop()
19  {
20  if (StartTime != DateTime.MinValue)
21  {
22  AddDuration(DateTime.Now - StartTime);
23  StartTime = DateTime.MinValue;
24  }
25  }
26 
27  private string _GroupName="<Not grouped>";
28 
29  public string GroupName
30  {
31  get { return _GroupName; }
32  set { _GroupName= value; }
33  }
34 
35 
36  TimeSpan _TotalDuration = new TimeSpan(0);
37 
38  public TimeSpan TotalDuration
39  {
40  get { return _TotalDuration; }
41  }
42 
43  public long ValuesCount { get; private set; }
44 
45  public TimeSpan AverageDuration
46  {
47  get
48  {
49  if (ValuesCount == 0) return new TimeSpan(0);
50 
51  return TimeSpan.FromTicks(_TotalDuration.Ticks / ValuesCount);
52  }
53  }
54 
55 
56  List<TimeSpan> _MaxDurations = new List<TimeSpan>();
57 
58  public TimeSpan MaxDuration
59  {
60  get
61  {
62  return MaxDurations.Max();
63  }
64  }
65 
66  public List<TimeSpan> MaxDurations
67  {
68  get { return _MaxDurations; }
69  private set { _MaxDurations = value; }
70  }
71 
72 
73  List<TimeSpan> _MinDurations = new List<TimeSpan>();
74 
75  public TimeSpan MinDuration
76  {
77  get
78  {
79  return MinDurations.Min();
80  }
81  }
82 
83 
84  public List<TimeSpan> MinDurations
85  {
86  get { return _MinDurations; }
87  private set { _MinDurations = value; }
88  }
89 
90 
91 
92  private TimeSpan MaxBoundary;
93  private TimeSpan MinBoundary;
94  private bool MinMaxBufferFull = false;
95  public void AddDuration(TimeSpan Duration)
96  {
97  _TotalDuration += Duration;
98  ValuesCount++;
99  if (!MinMaxBufferFull)
100  {
101  MaxDurations.Add(Duration);
102  MinDurations.Add(Duration);
103  if (MaxDurations.Count > 9)
104  {
105  MaxBoundary = MaxDurations.Min();
106  MinBoundary = MinDurations.Max();
107  MinMaxBufferFull = true;
108  }
109  return;
110  }
111 
112 
113  if (Duration.CompareTo(MaxBoundary) > 0)
114  {
115  MaxDurations.Remove(MaxBoundary);
116  MaxDurations.Add(Duration);
117  MaxBoundary = MaxDurations.Min();
118  }
119  if (Duration.CompareTo(MinBoundary) < 0)
120  {
121  MinDurations.Remove(MinBoundary);
122  MinDurations.Add(Duration);
123  MinBoundary = MinDurations.Max();
124  }
125 
126 
127 
128  }
129 
130 
131 
132 
133  public override string ToString()
134  {
135 
136  string S = "{0}, ".Build(Name);
137  S+= "Values count: {0}".Build(ValuesCount);
138  if (ValuesCount > 0)
139  {
140  S += ", Total: {0}, ".Build(TotalDuration.Format());
141  S += "Avg.: {0}, ".Build(AverageDuration.Format());
142  S += "Min.: {0}, ".Build(MinDuration.Format());
143  S += "Max.: {0}".Build(MaxDuration.Format());
144 
145 
146  }
147  return S;
148  }
149 
150 
151  }
152 }