当前位置:首页 > 网络编程 > WEB编程 > ASP.net > 可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件

可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件

点击次数:20 次 发布日期:2008-11-26 23:43:01 作者:源代码网
源代码网推荐 上次我发布了一个用以在记录文件中写入自定义的调试信息(主要是时间)的组件,但由于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);
源代码网推荐        }
源代码网推荐
源代码网推荐        //询问时间跨度(距离时间起点)
源代码网推荐        static public decimal GetTimeSpanFromInit()
源代码网推荐        {
源代码网推荐            return GetTimeSpanFromInit("");
源代码网推荐        }
源代码网推荐
源代码网推荐        static public decimal GetTimeSpanFromInit(string note)
源代码网推荐        {
源代码网推荐            PrevTimePoint = TimeCounter.GetExactNow().Ticks;
源代码网推荐            decimal span;
源代码网推荐            span = (decimal)(PrevTimePoint - InitTimePoint) / (decimal)10000;
源代码网推荐            FileWriter.WriteText("询问时间跨度[" + note + "],距离时间起点为" + span.ToString() + "毫秒。", false);
源代码网推荐            return span;
源代码网推荐        }
源代码网推荐
源代码网推荐        //询问时间跨度(距离上次询问时间)
源代码网推荐        static public decimal GetTimeSpanFromPrev()
源代码网推荐        {
源代码网推荐            return GetTimeSpanFromPrev("");
源代码网推荐        }
源代码网推荐
源代码网推荐        static public decimal GetTimeSpanFromPrev(string note)
源代码网推荐        {
源代码网推荐            long RectTimePoint =TimeCounter.GetExactNow().Ticks;
源代码网推荐            decimal span;
源代码网推荐            span = (decimal)(RectTimePoint - PrevTimePoint) / (decimal)10000;
源代码网推荐            PrevTimePoint = RectTimePoint;
源代码网推荐            FileWriter.WriteText("询问时间跨度[" + note + "],距离上次询问时间为" + span.ToString() + "毫秒。", false);
源代码网推荐            return span;
源代码网推荐        }
源代码网推荐
源代码网推荐        //设置自定义计数器
源代码网推荐        static public int SetCounter()
源代码网推荐        {
源代码网推荐            return SetCounter(0);
源代码网推荐        }
源代码网推荐        static public int SetCounter(int num)
源代码网推荐        {
源代码网推荐            counter = num;
源代码网推荐            FileWriter.WriteText("自定义计数器值设置为" + counter + "。", false);
源代码网推荐            return counter;
源代码网推荐        }
源代码网推荐        
源代码网推荐        //累加自定义计数器
源代码网推荐        static public int AddCounter()
源代码网推荐        {
源代码网推荐            return AddCounter(1);
源代码网推荐        }
源代码网推荐        static public int AddCounter(int num)
源代码网推荐        {
源代码网推荐            counter += num;
源代码网推荐            FileWriter.WriteText("自定义计数器值累加到" + counter + "。", false);
源代码网推荐            return counter;
源代码网推荐        }
源代码网推荐    }
源代码网推荐}
源代码网推荐
源代码网推荐using System;
源代码网推荐using System.Runtime.InteropServices;
源代码网推荐
源代码网推荐namespace TraceSpy
源代码网推荐{
源代码网推荐    internal class TimeCounter
源代码网推荐    {
源代码网推荐        [DllImport("kernel32.dll")]
源代码网推荐        static extern bool QueryPerformanceCounter([In, Out] ref long lpPerformanceCount);
源代码网推荐        [DllImport("kernel32.dll")]
源代码网推荐        static extern bool QueryPerformanceFrequency([In, Out] ref long lpFrequency);
源代码网推荐
源代码网推荐        static long _f = 0;
源代码网推荐
源代码网推荐        static private long GetTickCount()
源代码网推荐        {
源代码网推荐            long f = _f;
源代码网推荐            if (f == 0)
源代码网推荐            {
源代码网推荐                if (QueryPerformanceFrequency(ref f))
源代码网推荐                {
源代码网推荐                    _f = f;
源代码网推荐                }
源代码网推荐                else
源代码网推荐                {
源代码网推荐                    _f = -1;
源代码网推荐                }
源代码网推荐            }
源代码网推荐            if (f == -1)
源代码网推荐            {
源代码网推荐                return Environment.TickCount * 10000;
源代码网推荐            }
源代码网推荐            long c = 0;
源代码网推荐            QueryPerformanceCounter(ref c);
源代码网推荐            return (long)(((double)c) * 1000 * 10000 / ((double)f));
源代码网推荐        }
源代码网推荐
源代码网推荐        static long _tc = 0;
源代码网推荐
源代码网推荐        static internal DateTime GetExactNow()
源代码网推荐        {
源代码网推荐            if (_tc == 0)
源代码网推荐            {
源代码网推荐                long tc = GetTickCount();
源代码网推荐                DateTime dt = DateTime.Now;
源代码网推荐                _tc = dt.Ticks - tc;
源代码网推荐                return dt;
源代码网推荐            }
源代码网推荐            return new DateTime(_tc + GetTickCount());
源代码网推荐        }
源代码网推荐    }
源代码网推荐}
源代码网推荐
源代码网推荐using System;
源代码网推荐
源代码网推荐namespace TraceSpy
源代码网推荐{
源代码网推荐    internal class FileWriter
源代码网推荐    {
源代码网推荐        static private System.IO.StreamWriter writer;
源代码网推荐
源代码网推荐        //向文件中写入一个字串
源代码网推荐        static internal void WriteText(string str, bool showTime)
源代码网推荐        {
源代码网推荐            if(TheTrace.TraceFileName == String.Empty)
源代码网推荐                return;
源代码网推荐            writer = new System.IO.StreamWriter(TheTrace.TraceFileName, true, System.Text.Encoding.Default);
源代码网推荐            string words;
源代码网推荐            words = str;
源代码网推荐            if(showTime)
源代码网推荐                words += " @ " + TimeCounter.GetExactNow().ToLongDateString() + " " + TimeCounter.GetExactNow().ToLongTimeString();
源代码网推荐            writer.WriteLine(words);
源代码网推荐            writer.Close();
源代码网推荐        }
源代码网推荐
源代码网推荐        //清除记录文件
源代码网推荐        static internal void ClearAllText()
源代码网推荐        {
源代码网推荐            if(TheTrace.TraceFileName == String.Empty)
源代码网推荐                return;
源代码网推荐            writer = new System.IO.StreamWriter(TheTrace.TraceFileName, false, System.Text.Encoding.Default);
源代码网推荐            writer.Write("");
源代码网推荐            writer.Close();
源代码网推荐        }
源代码网推荐    }
源代码网推荐}
源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华