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 > * )
{
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结束,自动写入日志
using 自动释放资源示例的更多相关文章
- c#:使用using关键字自动释放资源未必一定就会有明显好处
public string ToXML() { string strXml = string.Empty; try { MemoryStream ms = new MemoryStream(); Xm ...
- Qt 编程指南 3_1 按钮弹窗手动和自动关联示例
触发的两种模式 connect() 和 on_控件ID_控件函数(参数) 两者优缺点对比: 虽然 Qt 有比较好用的自动关联大法,但自动关联不是万能的,尤其是涉及到多个窗体的时候,比如 A 窗体私有按 ...
- requests、BeautifulSoup、自动登陆示例
requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...
- java7(3)——增强的catch之自动释放资源
跟mutilcatch一样,java7提供了自动释放资源的方法,但还是很少看到人使用,估计是麻烦去重写close方法.不过jdk内部一些类已经改成使用增强的catch来释放资源的写法,所以我们有必要了 ...
- PyTorch 自动微分示例
PyTorch 自动微分示例 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后训练第一个神经网络.autograd 软件包为 Tensors 上的所有算子提供自动微分 ...
- spring 组件自动装载示例(@ComponentScan,@Component,@Scope)
今天学习spring的bean组件装载功能,个人不太喜欢xml文件一个个配置bean的方式,所以主要学习测试注解式的自动装载方式.下面将简单说明下@Component的用法,简单入门示例献给大家. ...
- Autofac手动注入及自动注入示例
参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...
- 新建swap分区的规划、挂载和自动挂载示例
注:来自Linux系统管理_磁盘分区和格式化的扩展 Linux系统管理_磁盘分区和格式化:http://murongqingqqq.blog.51cto.com/2902694/1361918 思路: ...
- JS 实现Table相同行的单元格自动合并示例代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
随机推荐
- Babel总结
什么是babel? babel是一个JavaScript编译器. Babel是一个工具链,主要用于将ECMAScript 2015+代码转换为向后兼容的旧浏览器或环境中JavaScript版本. 注解 ...
- 前端 --- 4 js
一.js 描述 JavaScript 是脚本语言 JavaScript 是一种轻量级的编程语言.后来出现了node.js,可以作为后端语言来开发项目, js是一个既能做前端又能做后端的语言 Java ...
- maven项目更新之后,JDK版本成为1.5
描述:maven项目更新之后,JDK版本成为1.5? 解决:在pom.xml文件中配置java版本,选中build path 设置之后,刷新maven项目
- Restful framework【第五篇】解析器
基本使用 -解析器 -源码从request.data -全局配置 -'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser'], -局 ...
- noip模拟【noname】
noname [问题描述] 给定一个长度为n的正整数序列,你的任务就是求出至少需要修改序列中的多少个数才能使得该数列成为一个严格(即不允许相等)单调递增的正整数序列,对序列中的任意一个数,你都可以将其 ...
- CentOS7.2 安装Docker
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 [roo ...
- L2-001:dijskstra + 多条最短路径 + 记录中间路径
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 思路: dijkstra算出最短路 ...
- 【做题】uoj#370滑稽树上滑稽果——巧妙dp
一个显然的结论是最终树的形态必然是一条链.具体证明只要考虑选定树上的某一条链,然后把其他部分全部接在它后面,这样答案一定不会变劣. 那么,一开始的想法是考虑每一位的最后出现位置,但这并不容易实现.注意 ...
- 【Dalston】【第三章】声明式服务调用(Feign)
当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻.那 ...
- python 之 知识点(1)
在python是使用bif=built in functions 即内置函数 dir(__builtins__) 可以查看所有的内置函数.注:pycharm中无法使用,不知道原因 help(input ...