Khi tôi thực hiện chương trình sau đây và xem bộ đếm hiệu năng, kết quả không có ý nghĩa đối với tôi. Giá trị trung bình bằng không và giá trị min/max là ~ 0.4 khi tôi mong đợi ~ 0.1 hoặc ~ 100.Làm thế nào để sử dụng các bộ đếm hiệu năng AverageTimer32 và AverageBase với System.Diagnostics.Stopwatch?
Vấn đề của tôi là gì?
Mã
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 Ảnh chụp màn hình Performance Counter Screenshot http://friendfeed-media.com/50028bb6a0016931a3af5122774b56f93741bb5c
Tại sao bạn cần đúc không được kiểm soát ((Int32) .. .)? performanceCounterTicks được đánh giá là dài, tất cả các giá trị thực sự là số dài. –
@DavideIcardi: Cảm ơn bạn, bạn đúng rằng chữ ký của phương thức 'IncrementBy' chấp nhận một' Int64' do đó không cần thực hiện một dàn diễn viên. Tôi đã xóa đoạn trích khỏi mã. –
Đẹp! đúng những gì tôi đang tìm kiếm! – vtortola