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

ASP.NET
C# Quoted-Printable编码、解码
asp.net Google的translate工具翻译 API
.NET读取所有目录下文件正则匹配文本电子邮件
asp.net 半角全角转化工具
AjaxControlToolKit 显示浏览者本地语言的方法
asp.net HTML文件上传标签
ASP.NET 绑定DataSet中的多个表
ASP.NET 重定向的几种方法小结
Asp.Net 重定向必须要知道的一些资料
ASP.NET 导出到Excel时保留换行的代码
Asp.Net Cache缓存使用代码
document.getElementsByName和document.getElementById 在IE与FF中不同实现
GridView单元格合并
asp.net 大文件上传控件
asp.net 日期函数 某月的第一天和最后一天的日期
asp.net 时间类 一周的周一和周末的日期
C# javaScript函数的相互调用
asp.net membership 密码重设
"虚拟路径"..."映射到另一个应用程序,这是不允许的!
如何传值在2个页面之间 要求不刷新父页面,并且不能用Querystring传值

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 248 ::
收藏到网摘: n/a

上次我发布了一个用以在记录文件中写入自定义的调试信息(主要是时间)的组件,但由于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 = Ge