• 奇怪的IndexOutOfRangeException


    不知道从什么时候开始,WebApplication 开始出现 IndexOutOfRangeException,也不是频繁出现,而是偶尔发生这种异常,真是奇怪。

    Exception information: 
    Exception type: IndexOutOfRangeException 
    Exception message: 索引超出了数组界限。 
    Stack trace:    在 
    System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
       在 System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
       在 System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
       在 System.Data.SqlClient.SqlDataReader.get_Item(Int32 i)
       在 dazaza.info.GetUserInfo(String name)

    出现这种异常一般是因为 DataReader 没有读取到数据库中对应的列,但这里肯定不是这个原因引起的,因为提取数据库的 SQL 语句中是确信没有错误的,先前很长一段时间以来,程序运转非常正常,此后代码基本上没有修改,只是做了一些 Cache 功能,关键是,这个 IndexOutOfRangeException 异常是偶尔发生,而且一旦发生后,就会产生连锁效应,其它一些 DataReader 也跟着引发异常,甚至导致 IIS 的瘫痪!


    引发异常的代码片段如下:

     using (System.Data.SqlClient.SqlDataReader drUser = new DataAccess.User().GetAUserFromView(Name))
    {
        if (dr.HasRows == false)
        {
              throw new Exception("#by cacard:dr.HasRows==false : "+dr.FieldCount.ToString());
              //这里偶尔抛出异常,dr 没有 HasRows,但其 FieldCount 却是正确的
        }
       else(drUser.Read())
       {
             blog = drUser[0].ToString();
             //异常就在这里发生
       }
    }

    Google 了一下这个问题,原来老外被这个问题困了 2 年多了,具体请看这个链接,他们讨论了一大堆也没有找到原因和很好的解决方案,原因可能是:WebApplication 的访问量比较大,数据库 Pooling 存在问题,数据访问层使用了静态方法,ADO.NET 本身存在缺陷,或者 .NET 内存分配的问题。可尝试一下这些解决办法,过一段时间重启 IIS,关闭 Pooling,数据访问层不要使用静态方法,但问题依然存在。

  • 相关阅读:
    14.使用nodejs将规定格式的txt转化为json数据
    13.resize妙用(书上看到的)
    12.写了一个怪怪的边框
    11.一起来抄一个小小的提示菜单
    UI02-textfiled.按钮 uibutton
    UI01-UIview UIlable的属性
    OC9-内存管理
    OC8-属性 KVC是键值编码
    OC7-‍ 类目,延展 协议代理。
    OC6-block-函数指针
  • 原文地址:https://www.cnblogs.com/caca/p/1136815.html
Copyright © 2020-2023  润新知