zoukankan      html  css  js  c++  java
  • C# 記錄程序運行時間


        最近因需要,做一個記錄程序運行時間的代碼,並計算耗時,以便於測試程序運行速度。

    原理:
        被測程序之間定義兩個記錄點。第一個記錄點記錄開始,第二個記錄點記錄結束,得出耗時,保存到文件。這兩個記錄點用標志參數來對應。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    using System.IO;

    namespace test
    {
        
    public partial class Form1 : Form
        {
            
    public Form1()
            {
                LogTime(
    " Initialize""a");
                InitializeComponent();

                LogTime(
    " messB""b");
                MessageBox.Show(
    "B");
                LogTime(
    " MessB""b");
                MessageBox.Show(
    "c");
                LogTime(
    "MessC""b");
                LogTime(
    "Initialize""a");         
            }
            #region 記錄時間

            
    #region 變量定義
            
    /// <summary>
            
    /// 定義範型保存記錄時間
            
    /// </summary>
            static Dictionary<string, DateTime> dytLogTime = new Dictionary<string, DateTime>();
            
    /// <summary>
            
    /// 保存信息
            
    /// </summary>
            static Dictionary<stringstring> dyLogInstruction = new Dictionary<stringstring>();
            
    /// <summary>
            
    /// 時間變量
            
    /// </summary>
            static DateTime dtTime;
            
    /// <summary>
            
    /// 存放文件的路徑
            
    /// </summary>
           static string sPathFile = "";
           
    /// <summary>
           
    /// 是否冊除過文件
           
    /// </summary>
           private static bool IsDeleteOldFile = false;


            
    #endregion

            
    #region 常量定義
            
    /// <summary>
            
    /// "Sign:"常量
            
    /// </summary>
            private const string csSign = " Sign:";
            
    /// <summary>
            
    /// "Start"常量
            
    /// </summary>
            private const string csStrat = " Start";
            
    /// <summary>
            
    /// End常量
            
    /// </summary>
            private const string csEnd = " End";
            
    /// <summary>
            
    ///Total常量
            
    /// </summary>
            private const string csTotal = " Total:";
            
    /// <summary>
            
    /// "— — —"段落分隔常量
            
    /// </summary>
            private const string csLine = "\r\n— — — — — — — — — — — — — — — — \r\n";
            
    /// <summary>
            
    /// "——"分隔符常量
            
    /// </summary>
            private const string csDivide = "——";
            
    /// <summary>
            
    /// 文件名常量
            
    /// </summary>
            private const string csFileName = "ByCooDebugTime.txt";
            
    /// <summary>
            
    /// 空格常量
            
    /// </summary>
            private const string csSpace = " ";
            
    /// <summary>
            
    /// 日期格式
            
    /// </summary>
            private const string csDateFormat = "MM-dd HH:mm:ss ffff";
            
    /// <summary>
            
    /// ":"冒號常量
            
    /// </summary>
            private const string csColon = "";
            
    #endregion

            
    /// <summary>
            
    /// 刪除存在的文件
            /// 第一次記錄時間時,判斷是否文件是否存在,如果存在,將舊的記錄文件刪除。
            /// </summary>
            private static void DeleteOldFile()
            {
                IsDeleteOldFile 
    = true;
                GetPathFile();
                
    if (System.IO.File.Exists(sPathFile))
                {
                    System.IO.File.Delete(sPathFile);
                }
            }

            
    /// <summary>
            
    /// 記錄時間方法
            
    /// 記錄時間並計算出兩個相同標志之間的時間差
            
    /// 文件保存在桌面的 當天日期+ByCooDebugTime.txt中
            
    /// </summary>
            
    /// <param name="asInstruction">說明信息</param>
            
    /// <param name="asSign">標志</param>
            private static void LogTime(string asInstruction,string asSign)
            {
                
    //記錄文件是否被刪除過
                if (IsDeleteOldFile==false)
                {
                    DeleteOldFile();
                }

                
    string sRunFile = Application.StartupPath;
                
    string sContent = "";  
                
    //實例化時間變量
                dtTime=new DateTime();
               
                
    //得到當前時間
                dtTime = DateTime.Now;
               
    /*
                * 判斷標志是否一致
                * 如果不一致,則表明是新的記錄任務,將標志及時間增加到泛型中保存
                * 如果一致,則表明此為任務的結束,記錄時間並移除泛型中的內容
                * 
                
    */
                
    if (!dytLogTime.ContainsKey(asSign))
                {
                    
    //將開始時間記錄到泛型中
                    dytLogTime.Add(asSign, dtTime);
                    
    //保存說明
                    dyLogInstruction.Add(asSign, asInstruction);
                    
    //記錄開始時間
                    sContent = csLine + asSign + csSpace + asInstruction + csStrat + csColon + dtTime.ToString(csDateFormat);
                    WriteContentFile(sContent);
                }
                
    else
                {
                    
    //記錄結束時間
                    sContent = asSign + csSpace + asInstruction + csEnd + csColon + dtTime.ToString(csDateFormat);
                    WriteContentFile(sContent);
                    
                    
    //得到時間差
                    string sTotalTime = Convert.ToString(dtTime - dytLogTime[asSign]);

                    
    //記錄時間差
                    sContent = asSign + "(" + dyLogInstruction[asSign] + csStrat + csDivide + asInstruction + csEnd + ")" + csTotal + sTotalTime + csLine;
                    WriteContentFile(sContent);
                }

            }

            
    /// <summary>
            
    /// 將字符寫入文件
            
    /// 文件名為 當天日期+ByCooDebugTime.txt
            
    /// </summary>
            
    /// <param name="asContent"></param>
            private static void WriteContentFile(string asContent)
            {
                StreamWriter mFileWrite;
                
    try
                {               
                    mFileWrite 
    = new StreamWriter(sPathFile, true, Encoding.Default);
                    
    //將t內容寫入文件
                    mFileWrite.WriteLine(asContent);
                }
                
    catch (Exception e)
                {
                    
    throw e;
                }
                mFileWrite.Flush();  
                mFileWrite.Close();
                mFileWrite.Dispose();
            }

            
    /// <summary>
            
    /// 得到記錄文件存放路徑
            
    /// </summary>
            private static void GetPathFile()
            {
                
    //存放於桌面
                string folderPath = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                
    //存放文件的路徑
                sPathFile = folderPath + "\\" + DateTime.Now.ToString("MM.dd"+ csFileName;
            }

            
    #endregion
        }

    }

    結果:
    — — — — — — — — — — — — — — — —
    a  Initialize Start: 01-25 11:37:35 1093

    — — — — — — — — — — — — — — — —
    b  messB Start: 01-25 11:37:35 4687
    b  MessB End: 01-25 11:37:37 2343
    b( messB Start—— MessB End) Total:00:00:01.7656250
    — — — — — — — — — — — — — — — —

    b MessC End: 01-25 11:37:38 8906
    b( messB Start——MessC End) Total:00:00:03.4218750
    — — — — — — — — — — — — — — — —

    a Initialize End: 01-25 11:37:38 8906
    a( Initialize Start——Initialize End) Total:00:00:03.7812500
    — — — — — — — — — — — — — — — —


  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/scottckt/p/1052812.html
Copyright © 2011-2022 走看看