다음 프로그램을 실행하고 성능 카운터를 보면 결과가 나에게 적합하지 않습니다. ~ 0.1 또는 ~ 100을 예상 할 때 평균값은 0이고 최소/최대 값은 ~ 0.4입니다.System.Diagnostics.Stopwatch에서 AverageTimer32 및 AverageBase 성능 카운터를 사용하는 방법?
내 문제는 무엇인가?
코드
class Program
{
const string CategoryName = "____Test Category";
const string CounterName = "Average Operation Time";
const string BaseCounterName = "Average Operation Time Base";
static void Main(string[] args)
{
if (PerformanceCounterCategory.Exists(CategoryName))
PerformanceCounterCategory.Delete(CategoryName);
var counterDataCollection = new CounterCreationDataCollection();
var avgOpTimeCounter = new CounterCreationData()
{
CounterName = CounterName,
CounterHelp = "Average Operation Time Help",
CounterType = PerformanceCounterType.AverageTimer32
};
counterDataCollection.Add(avgOpTimeCounter);
var avgOpTimeBaseCounter = new CounterCreationData()
{
CounterName = BaseCounterName,
CounterHelp = "Average Operation Time Base Help",
CounterType = PerformanceCounterType.AverageBase
};
counterDataCollection.Add(avgOpTimeBaseCounter);
PerformanceCounterCategory.Create(CategoryName, "Test Perf Counters", PerformanceCounterCategoryType.SingleInstance, counterDataCollection);
var counter = new PerformanceCounter(CategoryName, CounterName, false);
var baseCounter = new PerformanceCounter(CategoryName, BaseCounterName, false);
for (int i = 0; i < 500; i++)
{
var sw = Stopwatch.StartNew();
Thread.Sleep(100);
sw.Stop();
Console.WriteLine(string.Format("t({0}) ms({1})", sw.Elapsed.Ticks, sw.Elapsed.TotalMilliseconds));
counter.IncrementBy(sw.Elapsed.Ticks);
baseCounter.Increment();
}
Console.Read();
}
}
성능 카운터 스크린 샷 Performance Counter Screenshot http://friendfeed-media.com/50028bb6a0016931a3af5122774b56f93741bb5c
을 당신이 선택하지 않은 ((INT32를 캐스팅해야합니까 왜 .. : 카운터를 증가하면
, 그는이 같은 일을 권장 .)? performanceCounterTicks는 오랫동안 평가되며, 모든 값은 실제로 긴 숫자입니다. –
@DavideIcardi : 감사합니다.'IncrementBy' 메서드의 서명이'Int64'을 받아들이므로 캐스트를 수행 할 필요가 없습니다. 코드에서 캐스트를 제거했습니다. –
니스! 내가 무엇을 찾고 있었는지 맞아! – vtortola