using 自动释放资源示例
我们在使用SqlConnection的时候可以加入using,那么在using语句结束后就会自动关闭连接。那么这种情况是怎么是实现的呢?我们能够自己写一个类似于SqlConnection的类来让using自动关闭呢?
回答当然是没问题的了。首先我们自己写这个类必须要实现IDisposable接口,示例代码如下:
public class LogWriter : IDisposable { public LogWriter() { Console.WriteLine("初始化成功..."); } public void Dispose() { Console.WriteLine("释放资源..."); } }
使用代码如下:
static void Main(string[] args) { using (LogWriter log = new LogWriter()) { Console.WriteLine("执行中代码.."); } Console.ReadKey(); }
执行的结果如下:
基于以上内容,我们可以通过这种方式来记录耗时,首先定义一个类,如下:
public class WriteLog : IDisposable { private Stopwatch totalWatch = new Stopwatch(); //总耗时 private Stopwatch stepWatch = new Stopwatch(); //单步耗时 /// <summary> /// 构造函数,传入当前日志记录对象的说明信息 /// </summary> /// <param name="remark"></param> public WriteLog(String remark) { Msg = new StringBuilder(remark); totalWatch.Start(); stepWatch.Start(); } /// <summary> /// 单步消耗时间 /// </summary> public int StepTime { get; set; } /// <summary> /// 记录日志的消息 /// </summary> public StringBuilder Msg { get; set; } /// <summary> /// 记录最终日志 /// </summary> private void Write() { totalWatch.Stop(); stepWatch.Stop(); Msg.AppendFormat("总耗时:{0}毫秒\r\n", totalWatch.ElapsedMilliseconds); Helper.logWriter.Info(Msg); } /// <summary> /// 累加日志信息,记录操作步骤名称和脚本,并自动记录耗时 /// </summary> /// <param name="msg">步骤说明</param> /// <param name="sql">sql脚本</param> public void Append(String msg, String sql) { stepWatch.Stop(); Msg.AppendFormat("执行{0}耗时:{1}毫秒。", msg, stepWatch.ElapsedMilliseconds); if (!string.IsNullOrEmpty(sql)) { Msg.AppendFormat("\tsql:{0}", sql); } Msg.AppendLine(); //大于1分钟,记录错误日志 if (stepWatch.ElapsedMilliseconds > 60 * 1000) { Helper.logWriter.Error(string.Format("执行{0}耗时:{1}毫秒。sql:{2}", msg, stepWatch.ElapsedMilliseconds, sql)); } stepWatch.Restart(); } /// <summary> /// 释放资源,直接写入日志 /// </summary> public void Dispose() { Write(); } }
调用方法如下:
using (WriteLog log = new WriteLog("任务:" + this.task.Id + "\r\n")) { //逻辑处理 log.Append("从Oracle查询出DataTable", sql); InsertData(dt); log.Append("从DataTable写入结果表wifi.analysis_collision_result", ""); }//using结束,自动写入日志