zoukankan      html  css  js  c++  java
  • 对代码性能进行调试和量测

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

    第一步:定义一个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并不需要占用时间
  • 相关阅读:
    下载、安装、编译 QTLtools
    解决方案:使用QTLtools进行表型PCA分析,得到了一堆NA
    报错:terminate called after throwing an instance of 'std::length_error' what(): basic_string::_S_create
    使用 bcftools 进行基因型过滤(genotypes QC)
    使用 QTLtools 进行 PCA 分析
    生物信息学博士后招聘:香港浸会大学张璐博士和卞兆祥教授联合招聘
    Error in getNodeSet(html, path = "//div[@class='plain-box float-right archive-box']")[[1]] : 下标出界
    说说程序员写文档这事
    碎碎念五十
    计算一个服务端方法运行多次的平均耗时(Java)
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1314824.html
Copyright © 2011-2022 走看看