Я использую messageInspectors в моей службе WCF для измерения прошедшего времени для каждого метода службы, например:
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
if (_activated)
{
_startTime.Stop();
PerformanceCounterHandler.Instance.SetAveragePerformanceCounter(operationName, _startTime.ElapsedTicks);
}
}
public object BeforeCall(string operationName, object[] inputs)
{
Guid correlationState;
if (_activated)
{
correlationState = Guid.NewGuid();
_startTime = new Stopwatch();
_startTime.Start();
return correlationState;
}
return null;
}
Так регистрируются счетчики
foreach (string methodName in ServiceMethodNames)
{
counter = new CounterCreationData(methodName, methodName + " > Genomsnittlig tid(ms)", PerformanceCounterType.AverageTimer32);
col.Add(counter);
counter = new CounterCreationData(methodName + "_base", methodName + " > Genomsnittlig tid(ms)", PerformanceCounterType.AverageBase);
col.Add(counter);
}
Метод установки счетчика производительности выглядит следующим образом:
public Boolean SetAveragePerformanceCounter(string performanceCounterName, long value)
{
PerformanceCounter performCounter;
if (_useOrbitPerformanceCounters && (performCounter = _performanceCounters.Values.Where(c=> c.CounterName == performanceCounterName).FirstOrDefault()) != null)
{
performCounter.IncrementBy(value);
performanceCounterName = performanceCounterName + "_base";
performCounter = _performanceCounters[performanceCounterName];
performCounter.Increment();
return true;
}
return false;
}
Однако счетчик производительности показывает пики вместо среднего? Если я изменю представление, чтобы сообщить, что все равно 0, пока я ничего не делаю? Мне нужно иметь возможность видеть, как выглядит среднее время звонков прямо сейчас, даже если в данный момент звонков нет. Что я делаю неправильно?