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 ...
随机推荐
- 谈论linux同组多用户操作问题
同组多用户,最先起到什么作用这个我也是不明白的, 然后乱搞了一堆, 下面我做个笔记帮组日后分析. 一个用户组承载多个用户, 像这样 这是我原先的思路.然后就是chenglee用户和chenglee12 ...
- PHP命名空间(Namespace)的使用简介
原文链接:https://www.cnblogs.com/zhouguowei/p/5200878.html 可以导入命名空间也可以导入命名空间的类 <?php namespace Blog\A ...
- 20145320《网络对抗》注入Shellcode并执行
20145320注入Shellcode并执行 准备一段Shellcode 首先先准备一段C语言代码:这段代码其实和我们的shell功能基本一样 为了之后能够看到反汇编的结果,这次采用的静态编译.正常返 ...
- bozoj3131: [Sdoi2013]淘金 数位dp
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3131 思路 1. 函数值的素因子只有2.3.5.7 由他们组成的状态不多,爆搜的时候即使搜不 ...
- Vistual Studio Code配置
目录 查看版本,帮助: 修改vscode的扩展目录: 用户和工作区设置 用户设置的文件保存在如下目录: 所以有三种方式更改默认的设置: vscode同步配置: vscode启动launch.json配 ...
- sql 指定数据库中的信息操作
查是否有该表名 SELECT * FROM sys.objects WHERE name='表名'查表字段的信息select * from syscolumns where id=Object_Id( ...
- [CodeForces 892A] Greed (Java中sort实现从大到小排序)
题目链接:http://codeforces.com/problemset/problem/892/A 具体的Java 中 sort实现降序排序:https://www.cnblogs.com/you ...
- HDU 6096 String(AC自动机+树状数组)
题意 给定 \(n\) 个单词,\(q\) 个询问,每个询问包含两个串 \(s_1,s_2\),询问有多少个单词以 \(s_1\) 为前缀, \(s_2\) 为后缀,前后缀不能重叠. \(1 \leq ...
- k8s2
1.主节点与子节点如何沟通,交互 apiServer <==> kublet 2. pod之间如何共享, 使用volumn(数据卷 ) kube-proxy 和 service 配置好网络 ...
- 【OData】使用Odata获取数据之后再次获取可能得不到最新的数据问题记录
工作上遇到个问题是关于系统后台数据库更新了某数据后, 前台界面刷新显示的不是最新的数据.但是大约10分后再次刷新就能显示新的数据,或者重启IIS等web server host. 最开始认为可能是因为 ...