.NET : 一定不要忘记关闭DataReader对象



今天早上处理一个紧急的客户反应问题,这是去年开发的一套绩效考核系统。他们现在集团在推广使用,用户数多起来之后就发现某个页面响应速度非常慢,甚至会报告错误,无法完成操作。

经过检查,发现有一个方法用到了DataReader对象,但当时可能是疏忽了,忘记关闭该对象。特此记录这个问题,以为警示。

    /// <summary>
    /// 循环按照编号去取某个员工的某个指标的值
    /// </summary>
    /// <param name="taskList"></param>
    /// <returns></returns>
    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)
        {
            List<SqlParameter> param = new List<SqlParameter>();
            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;
    }

 

去年用的时候,因为用户数不太多,基本上没有察觉这个问题。

这个DataReader没有关闭的后果是造成它的Connection无法关闭,导致有很多连接被空闲,但是又没有销毁。这不能不说是一个低级错误。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值