还是Ivo Salmre 写的那本编写移动代码的那本书,这个类很实用,留下做个备份吧。 public class PerformanceSampling { const int NUMBER_SAMPLERS = 8; static string [] m_perfSamplesNames = new string[NUMBER_SAMPLERS]; static int[] m_perfSamplesStartTicks = new int[NUMBER_SAMPLERS]; static int[] m_perfSamplesDuration = new int[NUMBER_SAMPLERS]; /// <summary> /// Take a start tick count for a sample /// </summary> /// <param name="sampleIndex"></param> /// <param name="sampleName"></param> internal static void StartSample(int sampleIndex, string sampleName) { m_perfSamplesNames[sampleIndex] = sampleName; m_perfSamplesStartTicks[sampleIndex] = System.Environment.TickCount; } /// <summary> /// Take a start tick count for a sample /// </summary> /// <param name="sampleIndex"></param> internal static void StopSample(int sampleIndex) { int stopTickCount = System.Environment.TickCount; ///The counter resets itself every 24.9 days ///which is about 2 billion ms ///we'll account for this unlikely possibility /// if (stopTickCount >= m_perfSamplesStartTicks[sampleIndex]) { //In almost all cases we will run this code. m_perfSamplesDuration[sampleIndex] = stopTickCount - m_perfSamplesStartTicks[sampleIndex]; } else { //we have wrapped back around to zero and should account for this m_perfSamplesDuration[sampleIndex] = stopTickCount + (int.MaxValue - m_perfSamplesStartTicks[sampleIndex]) + 1; } } /// <summary> /// return the length of a sample we have taken length in milliseconds /// </summary> /// <param name="sampleIndex"></param> /// <returns></returns> internal static int GetSampleDuration(int sampleIndex) { return m_perfSamplesDuration[sampleIndex]; } /// <summary> /// returns the number of seconds that elapsed during the sample period /// </summary> /// <param name="sampleIndex"></param> /// <returns></returns> internal static string GetSampleDurationText(int sampleIndex) { return m_perfSamplesNames[sampleIndex] + ": " + System.Convert.ToString((m_perfSamplesDuration[sampleIndex] / (double)1000.0)) + " seconds"; } } 使用方法: /// <summary> /// 测试时间间隔测量器代码 /// 2010-2-20 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //MessageBox.Show( comboBox1.Text.Length.ToString()); const int TEST_SAMPLE_INDEX = 2; //choose any valid index //start sampling PerformanceSampling.StartSample(TEST_SAMPLE_INDEX, "TestSample"); //show the messagebox MessageBox.Show("Hit OK to finish Sample"); //stop sampling PerformanceSampling.StopSample(TEST_SAMPLE_INDEX); //show the results MessageBox.Show(PerformanceSampling.GetSampleDurationText(TEST_SAMPLE_INDEX)); }