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


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

    第一步:定义一个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并不需要占用时间
  • 相关阅读:
    JDK JRE Java虚拟机的关系
    apache和tomcat区别
    JBoss Web和 Tomcat的区别
    SOAP 与 restful service区别
    IntelliJ Idea 常用快捷键列表
    Win7用户文件夹转移
    相同IP和Mac地址的问题
    WebDriver 浅析
    Web UI 自动化测试
    python中xlrd模块的使用
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1314824.html
Copyright © 2020-2023  润新知