2015-04-22 5 views
1

Я создал счетчик производительности в C#. Однако, назначив ему значение, я хотел бы, чтобы значение было float вместо long, но я не могу понять, как это сделать. Может ли кто-нибудь помочь?Назначить значение поплавка счетчику производительности

код я использую из Counter of type RateOfCountsPerSecond32 always shows 0:

public static void Test() 
{ 
    var ccdc = new CounterCreationDataCollection(); 

    // Add the counter. 
    const string counterName = "RateOfCountsPerSecond64Sample"; 
    var rateOfCounts64 = new CounterCreationData 
    { 
     CounterType = PerformanceCounterType.RateOfCountsPerSecond64, 
     CounterName = counterName 
    }; 
    ccdc.Add(rateOfCounts64); 

    // Create the category. 
    const string categoryName = "RateOfCountsPerSecond64SampleCategory"; 
    if (PerformanceCounterCategory.Exists(categoryName)) 
     PerformanceCounterCategory.Delete(categoryName); 
    PerformanceCounterCategory.Create(categoryName, "", 
     PerformanceCounterCategoryType.SingleInstance, ccdc); 

    // create the counter 
    var pc = new PerformanceCounter(categoryName, counterName, false); 
    pc.RawValue = 1000; // <-- want to assign a float value here 
} 

Может кто-нибудь помочь?

+2

RawValue - длинное свойство, так почему вы хотите присвоить значение float длинному свойству? –

ответ

1

Вы не можете, и если вы думаете об этом, это не имеет никакого смысла. Счетчики счет событий, и вы не можете иметь половину события. Счетчики могут увеличиваться только по мере возникновения событий.

Счетчик скорости фактически вычисляет разницу базового счетчика между интервалами для целей отображения. Счетчики PerSecond используют системный счетчик интервалов, который увеличивается каждую секунду. Вам нужно только увеличивать счетчик всякий раз, когда происходят события, и ОС будет вычислять ставку.

Другие счетчики, которые вычисляют средние значения, также позволяют вам увеличивать базовый счетчик, так что вы можете иметь, например. Bytes per Packet счетчики

2

Ну, вы не можете; тип данных - long. Просто масштаб его каким-то фактором вместо этого (так что вы получите, чтобы сохранить несколько знаков после запятой, так как низкие цифры) - X1000, например, - и вокруг него:

pc.RawValue = (long)(value * 1000); 

Однако, так как вы используете RateOfCountsPerSecond32 - вы должны записывать итоговые суммы, а не ставку. Бэкэнд вычисляет скорость.