WSunny111 2020-04-24 21:34 采纳率: 33.3%
浏览 127

Stopwatch()测试运行时间

在文本框中输入数据进行排序,用stopwatch()测试的各种排序方法的运行时间,在程序运行后,第一次可以成功测出,但若将文本框中内容删除,再次输入数据,只能成功排序,并不能再次测试成功是为什么呢?
图片说明
图片说明
图片说明

图片说明

protected void compareButton_Click(object sender, EventArgs e)
{
//int[] test = new int[7];

        //记录时间
        //Stopwatch sw = new Stopwatch();
        sw.Reset();
        sw.Start();
        InsertionSort(aa);//
        sw.Stop();
        InsertionTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;
       // TimeSpan timespan = sw.Elapsed;
        //InsertionTime = timespan.TotalMilliseconds;
       // Label1.Text = "总耗时:" + InsertionTime.ToString() + "微秒\n";
        // Label1.Text = forShow(tt);

        sw.Reset();
        sw.Start();
        BubbleSort(bb);
        sw.Stop();
        BubbleTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;

        sw.Reset();
        sw.Start();
        ShellSort(cc);
        sw.Stop();
        ShellTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;

        sw.Reset();
        sw.Start();
        SelectionSort(dd);
        sw.Stop();
        SelectionTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;

        sw.Reset();
        sw.Start();
        QuickSort(ee,0,count-1);
        sw.Stop();
        QuickTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;

        sw.Reset();
        sw.Start();
        MergeSort(ff);
        sw.Stop();
        MergeTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;

        sw.Reset();
        sw.Start();
        HeapSort(gg);
        sw.Stop();
        HeapTime = 1000000.0 * sw.ElapsedTicks / Stopwatch.Frequency;
  • 写回答

1条回答 默认 最新

  • A_nanda 2024-05-31 16:57
    关注

    在C#中,如果你使用Stopwatch类来测试排序方法的运行时间,并且发现当你尝试重新测试(在清空文本框并再次输入数据后)时,Stopwatch没有再次测量时间,这通常不是由于Stopwatch本身的问题,而是由于你的代码逻辑或事件处理中的问题。

    以下是一些可能导致这种情况的原因以及相应的解决方案:

    事件绑定问题:你可能只在窗体加载或初始化时绑定了一次排序和测试时间的事件。如果文本框内容发生变化,你需要确保重新触发排序和测试。
    Stopwatch没有重置:在每次测试之前,你需要确保Stopwatch实例被重置(Stopwatch.Reset())和启动(Stopwatch.Start())。
    数据没有更新:确保在清空文本框后,你正在使用新的数据集合进行排序,而不是旧的、可能已经被排序过的集合。
    UI线程阻塞:如果排序操作在UI线程上执行并且需要很长时间,它可能会阻塞UI,导致无法正确响应后续的用户输入。考虑使用后台线程进行排序。
    代码逻辑错误:检查你的代码逻辑,确保在清空文本框后,所有相关的变量和状态都被正确更新。
    下面是一个简单的示例,展示了如何使用Stopwatch来测试排序方法的运行时间,并确保在每次输入变化时都能正确测试:

    
    ```c#
    csharp
    private Stopwatch stopwatch = new Stopwatch();  
    private List<int> numbers; // 假设这是你要排序的数据列表  
      
    private void textBox_TextChanged(object sender, EventArgs e)  
    {  
        // 假设这里你有一个方法来解析文本框的内容到numbers列表中  
        ParseTextBoxContentToNumbers();  
      
        // 重置Stopwatch  
        stopwatch.Reset();  
      
        // 开始计时  
        stopwatch.Start();  
      
        // 执行排序  
        numbers.Sort(); // 或者使用你的自定义排序方法  
      
        // 停止计时  
        stopwatch.Stop();  
      
        // 显示结果  
        MessageBox.Show("排序用时: " + stopwatch.ElapsedMilliseconds + " 毫秒");  
      
        // (可选)清空Stopwatch以便下次使用  
        stopwatch.Reset();  
    }  
      
    private void ParseTextBoxContentToNumbers()  
    {  
        // 这里你需要编写代码来解析文本框的内容,例如使用string.Split和int.Parse等方法  
        // 然后更新numbers列表  
        numbers = new List<int>(); // 示例:清空旧列表并准备填充新数据  
        // ... 解析逻辑 ...  
    }  
      
    // 确保在适当的时候(如窗体加载时)将TextChanged事件绑定到textBox_TextChanged方法  
    // textBox.TextChanged += textBox_TextChanged;
    请注意,这个示例假设你有一个名为textBox的文本框控件,并且已经将其TextChanged事件绑定到了textBox_TextChanged方法上。此外,ParseTextBoxContentToNumbers方法是一个占位符,你需要根据你的具体需求来实现它。
    
    

    ```

    评论

报告相同问题?