• 对代码性能进行调试和量测


    在研究数据结构和算法的时候,或者你仅仅是在对某段代码的性能心存疑惑想找到问题所在的时候,我们通常都需要能度量和比较代码执行的耗时。大部分时候,我们都可以通过下面这个简单的手段来实现该目的。

    第一步:定义一个Timing类,用来辅助我们进行一些性能方面的比较(主要监控时间)

    using System;
    using System.Diagnostics;
    
        public class Timing
        {
            TimeSpan startingTime;
            TimeSpan duration;
    
            public Timing() {
                startingTime = new TimeSpan(0);
                duration = new TimeSpan(0);
            }
    
            public void StartTime() {
                GC.Collect();
                GC.WaitForPendingFinalizers();
    
                startingTime = Process.GetCurrentProcess().Threads[0].UserProcessorTime;
            }
    
            public void StopTime() {
                duration = Process.GetCurrentProcess().Threads[0].UserProcessorTime.Subtract(startingTime);
            }
    
            public TimeSpan Result {
                get {
                    return duration;
                }
            }
    
        }

    第二步: 具体使用的方法

        class Program
        {
            static void Main(string[] args)
            {
    
                int[] numbers = new int[100000];
    
                Timing timing = new Timing();
                timing.StartTime();
                BuildArray(ref numbers);
    
                DisplayNumbers(numbers);
    
                timing.StopTime();
                Console.WriteLine();
                Console.WriteLine("总计耗时为:{0}秒",timing.Result.TotalSeconds);
                Console.Read();
    
            }
    
            private static void DisplayNumbers(int[] numbers)
            {
                for (int i = 0; i < numbers.GetUpperBound(0); i++)
                {
                    Console.Write(numbers[i]);
                }
            }
    
            private static void BuildArray(ref int[] numbers)
            {
                for (int i = 0; i < numbers.GetUpperBound(0); i++)
                {
                    numbers[i] = i * (new Random()).Next();
                }
            }
        }
     
     
    最后输出的结果可能是这样的
    image 
     
    要注意到问题
    1. 在Visual Studio 调试中是看不到效果的,因为其实在调试中是没有独立的进程的,是由Visual Studio进行宿主
    2. 即便在代码中使用到了Thread.Sleep方法(线程休眠),也不会影响到最后输出的时间。因为我们是统计CPU时间,线程如果休眠,CPU并不需要占用时间
  • 相关阅读:
    批处理读取INI文件
    重装操作系统的20条原则
    SATA串口硬盘Windows Vista系统驱动安装实录
    中国国家地理高清晰的PDF书籍系列经典珍藏版
    单一职责原则
    理解boost::bind的实参传递方式
    理解C++ dynamic_cast
    C# vs C++之三:静态构造函数
    TDD可以驱动设计吗?
    依赖注入与对象间关系
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1314824.html
Copyright © 2020-2023  润新知