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 ...
随机推荐
- python之字符编码(二)
一.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以 ...
- python base64加解密
加密字符串 encodestr = base64.b64encode("chenglee1234".encode(encoding='utf-8')) 解密字符串 decodest ...
- 2018-2019-1 20189206 《Linux内核原理与分析》第五周作业
linux内核分析学习笔记 --第四章 系统调用的三层机制 学习重点--系统调用 用户态.内核态和中断 Intel x86 CPU有四种不同的执行级别,分别是0,1,2,3其中数字越小,特权越高. L ...
- noip 2013 提高组 day1
1.转圈游戏: 解析部分略,快速幂就可以过 Code: #include<iostream> #include<fstream> using namespace std; if ...
- delete指针
是释放指针所指向的内存,而不是删除指针本身
- QML常用控件
这里的控件是显示的元素 1.Item:一切的基类 Item { Image { source: "tile.png" } Image { x: width: height: sou ...
- OAuth2.0原理与实现
弄懂了原理流程,才可以搭建出来.更重要的是,可以根据原理流程自定义搭建,甚至可以完全自己实现一套,最后运行效果和原理和这个对得上就成功了,不要总期待标准答案! 首先参考两篇博客: 阮一峰的博客以及张开 ...
- How to check if one path is a child of another path?
How to check if one path is a child of another path? Unfortunately it's not as simple as StartsWith. ...
- Android Studio 快捷键、Debug的使用
https://blog.csdn.net/q908555281/article/details/49331371 1.快捷键 个人习惯常用快捷键 在Eclipse中常用的快捷键 ...
- 一、python (int & str 的方法)
1.变量:命名与使用 #!/usr/bin/env/ python # -*- coding:utf-8 -*- name = 'liQM' 只能包含字母.数字或下划线: 第一个字符不能是数字: 简短 ...