可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件
点击次数:20 次 发布日期:2008-11-26 23:43:01 作者:源代码网
|
源代码网推荐 源代码网推荐//==================================================================== 源代码网推荐//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(); 源代码网推荐 } 源代码网推荐 } 源代码网推荐} 源代码网推荐 源代码网供稿. |
