为性能计数器分配一个浮点值
Assign a float value to performance counter
我用 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
}
有人可以帮忙吗?
好吧,你不能;数据类型为 long
。只需按某个因子缩放它(这样你就可以保留几个小数位,作为低位数) - 例如 x1000 - 并对其进行四舍五入:
pc.RawValue = (long)(value * 1000);
但是,由于您使用的是 RateOfCountsPerSecond32
- 您应该记录总数,而不是比率。后端计算速率。
你不能,如果你仔细想想,它就没有任何意义。计数器 count 个不同的事件,你不能有一半的事件。计数器只能在事件发生时递增。
速率计数器实际上计算间隔之间基本计数器的差异以用于显示目的。 PerSecond
计数器使用系统提供的间隔计数器,每秒递增一次。您只需在事件发生时递增计数器,OS 将计算速率。
其他计算平均值的计数器也允许您增加基本计数器,因此您可以拥有例如。 Bytes per Packet
个计数器
我用 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
}
有人可以帮忙吗?
好吧,你不能;数据类型为 long
。只需按某个因子缩放它(这样你就可以保留几个小数位,作为低位数) - 例如 x1000 - 并对其进行四舍五入:
pc.RawValue = (long)(value * 1000);
但是,由于您使用的是 RateOfCountsPerSecond32
- 您应该记录总数,而不是比率。后端计算速率。
你不能,如果你仔细想想,它就没有任何意义。计数器 count 个不同的事件,你不能有一半的事件。计数器只能在事件发生时递增。
速率计数器实际上计算间隔之间基本计数器的差异以用于显示目的。 PerSecond
计数器使用系统提供的间隔计数器,每秒递增一次。您只需在事件发生时递增计数器,OS 将计算速率。
其他计算平均值的计数器也允许您增加基本计数器,因此您可以拥有例如。 Bytes per Packet
个计数器