日期:2012-02-07  浏览次数:20368 次

上次我发布了一个用以在记录文件中写入自定义的调试信息(主要是时间)的组件,但由于CLR的限制,它只能精确到10毫秒左右。后来我参考了网络上的一篇文章:http://blog.joycode.com/lostinet/archive/2005/04/24/49590.aspx(在这里首先向原作者表示感谢)通过调用系统API得到了可精确到1毫秒左右的时间记录。故特重新用C#重写了这个组件,与大家共享。

//====================================================================
//TraceSpy - 用以在记录文件中写入自定义的调试信息(开发者:林健)
//====================================================================
//
//属性:
//       TraceFileName        - 记录文件名
//
//方法:
//   ★文本写入方面
//       WriteText            - 写入自定义文本
//       ClearAllText         - 清除所有文本
//   ★时间记录方面
//       SetTimePoint         - 设置时间起点
//       GetTimeSpanFromInit  - 询问时间跨度(距离时间起点)
//       GetTimeSpanFromPrev  - 询问时间跨度(距离上次询问时间)
//   ★自定义计数器
//       SetCounter           - 设置自定义计数器
//       AddCounter           - 累加自定义计数器
//
//====================================================================

using System;

namespace TraceSpy
{
    public class TheTrace
    {

        //记录文件名
        static public string TraceFileName = "Trace.txt";

        //时间起点(初始为当前时刻)
        static private long InitTimePoint = TimeCounter.GetExactNow().Ticks;

        //上次询问时间点(初始为当前时刻)
        static private long PrevTimePoint = TimeCounter.GetExactNow().Ticks;

        //自定义计数器
        static private int counter = 0;

        //写入自定义文本
        static public void WriteText(string str)
        {
            WriteText(str, false);
        }

        static public void WriteText(string str, bool showTime)
        {
            FileWriter.WriteText(str, showTime);
        }

        //清除所有文本
        static public void ClearAllText()
        {
             FileWriter.ClearAllText();
        }

        //设置时间起点
        static public void SetTimePoint()
        {
             SetTimePoint("");
        }

        static public void SetTimePoint(string note)
        {
            InitTimePoint = TimeCounter.GetExactNow().Ticks;
            PrevTimePoint = TimeCounter.GetExactNow().Ticks;
            FileWriter.WriteText("设置时间起点[" + note + "]。", false);
        }