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并不需要占用时间
  • 相关阅读:
    .net ajax和后台数据简单交互。传参JSON返回
    基于layui的管理后台简单导航,简单框架布局。左侧菜单栏以及动态操作tab项
    .net使用layui框架下。绑定搜索下拉框-模糊查询
    .NET用样式做模式模态窗口层,弹出遮罩层
    .net里ajax调用后台方法返回LIST集合
    sql的行转列(case when) sqlserver.net
    查SQLSERVER MSSQL查约束是哪张表
    powerbuilder 在pb里面怎么把文件编译成exe文件
    powerbuilder datawindow给表格某列赋值或设置禁用
    powerbuilder给文本框赋值
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1314824.html
Copyright © 2011-2022 走看看