PerformanceCounter RawValue未更改\已修改

时间:2015-04-05 20:04:55

标签: c# perfmon

我正在尝试修改我在C#中创建的PerformanceCounter。  但它似乎并没有被改变。这个计数器需要一个标志:0或1。

我从网上拿了以下代码。它创造了收藏家类别以及计数器。但RawValue总是显示0!

我正在使用Win7 / 64。

你能告诉我吗?

    using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace PerformanceCounterSample
{
    /// <summary>
    /// Entry class for the sample
    /// </summary>
    class PerformanceCounterSampleStarter
    {
        /// <summary>
        /// Imports the <code>QueryPerformanceFrequency</code> me  thod into the class. The method is used to measure the current
        /// tickcount of the system.
        /// </summary>
        /// <param name="ticks">current tick count</param>
        [DllImport("Kernel32.dll")]
        public static extern void QueryPerformanceCounter(ref long ticks);

        /// <summary>
        /// Main thread
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            PerformanceCounterSample test = new PerformanceCounterSample();
            Random rand = new Random();
            long startTime = 0;
            long endTime = 0;

            for (int i=0; i<1000; i++)
            {
                // measure starting time
                QueryPerformanceCounter(ref startTime);

                System.Threading.Thread.Sleep(rand.Next(500));

                // measure ending time
                QueryPerformanceCounter(ref endTime);

                // do some processing
                test.DoSomeProcessing(endTime - startTime);
            }
        }
    }

    /// <summary>
    /// The PerformanceCounterSample class sets up a performance counter category called "JamboCpmTool" if it does not already
    /// exists and adds some counters to it. It provides a method to increment these counters.
    /// </summary>
    public class PerformanceCounterSample
    {
        private PerformanceCounter m_cntrJoinConctConf_VPG_MyJamboLogin;

        public PerformanceCounterSample()
        {
            if (!PerformanceCounterCategory.Exists("JamboCpmTool"))
            {
                CounterCreationDataCollection counters = new CounterCreationDataCollection();

                CounterCreationData VPG_MyJamboLogin = new CounterCreationData();
                VPG_MyJamboLogin.CounterName = "JoinConnectConf_VPG_MyJamboLogin";
                VPG_MyJamboLogin.CounterHelp = "Join Connect Conf VPG MyJambo Login Success";
                VPG_MyJamboLogin.CounterType = PerformanceCounterType.NumberOfItems64;
                counters.Add(VPG_MyJamboLogin);

                // create new category with the counters above
                System.Diagnostics.PerformanceCounterCategory.Create("JamboCpmTool", "Sample category for Codeproject", PerformanceCounterCategoryType.SingleInstance, counters);
            }

            // create counters to work with
            m_cntrJoinConctConf_VPG_MyJamboLogin = new PerformanceCounter();
            m_cntrJoinConctConf_VPG_MyJamboLogin.CategoryName = "JamboCpmTool";
            m_cntrJoinConctConf_VPG_MyJamboLogin.CounterName = "JoinConctConf_VPG_MyJamboLogin";
            m_cntrJoinConctConf_VPG_MyJamboLogin.MachineName = ".";
            m_cntrJoinConctConf_VPG_MyJamboLogin.ReadOnly = false;
            m_cntrJoinConctConf_VPG_MyJamboLogin.RawValue = 0;
        }

        /// <summary>
        /// Increments counters.
        /// </summary>
        /// <param name="ticks">The number of ticks the AverageTimer32 counter must be incremented by</param>
        public void DoSomeProcessing(long ticks)
        {
            m_cntrJoinConctConf_VPG_MyJamboLogin.RawValue = 100L;
            Console.WriteLine("m_cntrJoinConctConf_VPG_MyJamboLogin = " + m_cntrJoinConctConf_VPG_MyJamboLogin.RawValue);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要调用m_cntrJoinConctConf_VPG_MyJamboLogin.NextValue();来填充属性。

注意:第一次调用NextValue()时RawValue将为0,因为该功能是比较的。因此,下次您致电NextValue()时,您应该得到答案。

读取性能计数器之间的最小建议频率为1秒。

有关详细信息,请参阅此MSDN article