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 ...
随机推荐
- Educational Codeforces Round 40 (Rated for Div. 2) Solution
从这里开始 小结 题目列表 Problem A Diagonal Walking Problem B String Typing Problem C Matrix Walk Problem D Fig ...
- bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法
给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sampl ...
- android studio设计模式和文本模式切换
- 复旦高等代数II(16级)每周一题
每周一题的说明 一.本学期高代II的每周一题面向16级的同学,将定期更新(一般每周的周末公布下一周的题目); 二.欢迎16级的同学通过微信或书面方式提供解答图片或纸质文件给我,优秀的解答可以分享给大家 ...
- 日志统计 尺取法【蓝桥杯2018 C/C++ B组】
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- HDU 4825 Xor Sum(01字典树)题解
思路:先把所有数字存进字典树,然后从最高位贪心. 代码: #include<set> #include<map> #include<stack> #include& ...
- C# 禁止任务管理器关闭
http://www.cnblogs.com/luomingui/archive/2011/06/25/2090130.html 测试了好像没用的.不知道什么原因
- LOJ121 「离线可过」动态图连通性
思路 动态图连通性的板子,可惜我不会在线算法 离线可以使用线段树分治,每个边按照存在的时间插入线段树的对应节点中,最后再dfs一下求出解即可,注意并查集按秩合并可以支持撤销操作 由于大量使用STL跑的 ...
- P3121 [USACO15FEB]审查(黄金)Censoring (Gold)
吐槽 数据太水了吧,我AC自动机的trie建错了结果只是RE了两个点,还以为数组开小了改了好久 思路 看到多模板串,字符串匹配,且模板串总长度不长,就想到AC自动机 然后用栈维护当前的字符串位置,如果 ...
- P3455 [POI2007]ZAP-Queries(莫比乌斯反演)
思路 和YY的GCD类似但是更加简单了 类似的推一波公式即可 \[ F(n)=\sum_{n|d}f(d) \] \[ f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d) \] \ ...