Mercurial > pub > bltoolkit
comparison Source/Aspects/MethodCallCounter.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Collections; | |
3 using System.Reflection; | |
4 | |
5 namespace BLToolkit.Aspects | |
6 { | |
7 [System.Diagnostics.DebuggerStepThrough] | |
8 public class MethodCallCounter | |
9 { | |
10 public MethodCallCounter(CallMethodInfo methodInfo) | |
11 { | |
12 _callMethodInfo = methodInfo; | |
13 _methodInfo = methodInfo.MethodInfo; | |
14 } | |
15 | |
16 #region Public Members | |
17 | |
18 private MethodInfo _methodInfo; | |
19 public MethodInfo MethodInfo | |
20 { | |
21 get { return _methodInfo; } | |
22 set { _methodInfo = value; } | |
23 } | |
24 | |
25 private CallMethodInfo _callMethodInfo; | |
26 public CallMethodInfo CallMethodInfo | |
27 { | |
28 get { return _callMethodInfo; } | |
29 set { _callMethodInfo = value; } | |
30 } | |
31 | |
32 private int _totalCount; | |
33 public int TotalCount | |
34 { | |
35 get { return _totalCount; } | |
36 set { _totalCount = value; } | |
37 } | |
38 | |
39 private int _exceptionCount; | |
40 public int ExceptionCount | |
41 { | |
42 get { return _exceptionCount; } | |
43 set { _exceptionCount = value; } | |
44 } | |
45 | |
46 private int _cachedCount; | |
47 public int CachedCount | |
48 { | |
49 get { return _cachedCount; } | |
50 set { _cachedCount = value; } | |
51 } | |
52 | |
53 private TimeSpan _totalTime; | |
54 public TimeSpan TotalTime | |
55 { | |
56 get { return _totalTime; } | |
57 set { _totalTime = value; } | |
58 } | |
59 | |
60 private TimeSpan _minTime = TimeSpan.MaxValue; | |
61 public TimeSpan MinTime | |
62 { | |
63 get { return _minTime; } | |
64 set { _minTime = value; } | |
65 } | |
66 | |
67 private TimeSpan _maxTime; | |
68 public TimeSpan MaxTime | |
69 { | |
70 get { return _maxTime; } | |
71 set { _maxTime = value; } | |
72 } | |
73 | |
74 private readonly ArrayList _currentCalls = ArrayList.Synchronized(new ArrayList()); | |
75 public ArrayList CurrentCalls | |
76 { | |
77 get { return _currentCalls; } | |
78 } | |
79 | |
80 public TimeSpan AverageTime | |
81 { | |
82 get | |
83 { | |
84 if (_totalCount == 0) | |
85 return TimeSpan.MinValue; | |
86 | |
87 return new TimeSpan(TotalTime.Ticks / TotalCount); | |
88 } | |
89 } | |
90 | |
91 #endregion | |
92 | |
93 #region Protected Members | |
94 | |
95 public virtual void RegisterCall(InterceptCallInfo info) | |
96 { | |
97 lock (_currentCalls.SyncRoot) | |
98 _currentCalls.Add(info); | |
99 } | |
100 | |
101 public virtual void UnregisterCall(InterceptCallInfo info) | |
102 { | |
103 AddCall(DateTime.Now - info.BeginCallTime, info.Exception != null, info.Cached); | |
104 | |
105 lock (_currentCalls.SyncRoot) | |
106 _currentCalls.Remove(info); | |
107 } | |
108 | |
109 protected void AddCall(TimeSpan time, bool withException, bool cached) | |
110 { | |
111 if (cached) | |
112 { | |
113 _cachedCount++; | |
114 } | |
115 else | |
116 { | |
117 _totalTime += time; | |
118 _totalCount++; | |
119 | |
120 if (_minTime > time) _minTime = time; | |
121 if (_maxTime < time) _maxTime = time; | |
122 } | |
123 | |
124 if (withException) _exceptionCount++; | |
125 } | |
126 | |
127 #endregion | |
128 } | |
129 } |