.NET : 一定不要忘记关闭DataReader对象
今天早上处理一个紧急的客户反应问题,这是去年开发的一套绩效考核系统。他们现在集团在推广使用,用户数多起来之后就发现某个页面响应速度非常慢,甚至会报告错误,无法完成操作。
经过检查,发现有一个方法用到了DataReader对象,但当时可能是疏忽了,忘记关闭该对象。特此记录这个问题,以为警示。
///
/// 循环按照编号去取某个员工的某个指标的值 ///
/// /// public static DataSet GetGroupExamineFormDataItems(List<string> taskList,string code) { DataSet ds = new DataSet(); DataTable tb = new DataTable(); tb.Columns.Add("EmployeeName"); tb.Columns.Add("SelectValue"); tb.Columns.Add("TaskId"); ds.Tables.Add(tb); foreach (string item in taskList) { Listparam = new List(); param.Add(new SqlParameter("@Id", item)); param.Add(new SqlParameter("@Code", code)); SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "GetGroupExamineFormDataItems", param.ToArray()); while (reader.Read()) { DataRow row = tb.NewRow(); row[0] = reader[0]; row[1] = reader[1]; row[2] = item; tb.Rows.Add(row); } reader.Close(); } return ds; }
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
去年用的时候,因为用户数不太多,基本上没有察觉这个问题。
这个DataReader没有关闭的后果是造成它的Connection无法关闭,导致有很多连接被空闲,但是又没有销毁。这不能不说是一个低级错误。
当然,这是一个疏忽,因为无论如何我们都知道应该是要关闭的,当时写代码估计是比较赶时间而出了差错。
.NET : 一定不要忘记关闭DataReader对象相关推荐
- C#之读取数据:DataReader对象
上一篇涉及到Command对象的ExecuteReader()方法返回一个DataReader对象,那么我们就来详细的介绍这个DataReade对象. 下面的例子使用的数据表依然与上篇的相同为Cust ...
- DataReader对象
DataReader对象(数据读取) DataReader对象提供了一个只进只读的数据读取器,用于从查询结果中读取数据,它每次仅能读取一行数据. [常用属性]: FieldCount:获取当前行的列数 ...
- DataReader对象的基本使用 c#
多行多列的数据读取 DataReader对象 功能 不同命名空间对应的DataReader对象 如何获得 命令对象.ExecuteReader() 对象的方法 Read方法 功能: 读取下一行 用法: ...
- 数据库开发019 DataReader对象
DataReader对象提供单向只读数据,只能依次读取数据,DataSet中的数据可以任意读取和修改.DataReader对象有一个很重要的方法Read,它是个布尔值,作用是读取下一条数据,当布尔值为 ...
- 都 2021 了,你还忘记关闭 http body?
作者 | 曹春晖 来源 | TechPaper 看了看日历,现在已经是 2021 年了,偶尔还是能看到有人在发诸如 <http body 未关闭导致线上事故>,或者 <sql.Row ...
- workbook对象需要关闭_XSSFWorkbook对象 进行zip打包时 用write资源流自动关闭处理办法...
xssfworkbook对象的write方法内会将传入的资源流自动关闭 导致下载excel失败 错误代码 outputstream out = response.getoutputstream(); ...
- java中logger关闭log_Log4J如何关闭Logger对象的IO流资源
之前,在做一个项目时,客户要求在接口中对各个交易每天在monitor.trans.service三个目录下生成日志文件,monitor按日期生成文件碎片,trans每天按照日期生成一个目录,在该目录下 ...
- datareader(Datareader对象的什么方法用于从查询结果中读取行)
DataReader和IDataReader的区别? IDataReader是一个接口,它规定了实现这个接口的具体类要提供哪些操作. 而具体的DataReader比如SQLDataReader和Ole ...
- datareader对象直接转化为int_Integer、new Integer() 和 int 比较的面试题
作者:chenxiangxiang来源:https://www.cnblogs.com/cxxjohnson/p/10504840.html 基本概念的区分: 1.Integer 是 int 的包装类 ...
最新文章
- 从千万级数据查询来聊一聊索引结构和数据库原理
- reddit android app,reddit安卓版app
- CentOS 5.2 下安装tripwire2.3.1.2出错解决
- 在FireFox IE 下Response 中文文件名乱码问题
- python中变量类型在程序中可以改变_python的可变与不可变数据类型
- html段落加边框,Word2010怎样为段落加上边框
- Java好文统计( 引用 )
- linux指令快速复制粘贴[龟速更新中]
- jQuery获取及设置单选框,多选框,文本框内容
- 微软的正则表达式教程(一):正则表达式简介
- android textview 必填,在android中如何使用Html渲染的方式实现必填项前面的*号
- Thinking in ++i and i++
- 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题
- mysql-8.0.11安装步骤
- 使用 shell 在多服务器上批量操作
- vasp和ms_采用MS建模的基本步骤以及vasp新手入门需要注意的十个简单问题
- 产品经理与数据的恩怨情仇
- mariadb安装几个问题
- 分享十一个学习css的小游戏,快来下载吧!
- 谈谈写程序与学英语 --宋劲杉