当前位置:  开发笔记 > 编程语言 > 正文

Queryable.Single上的IndexOutOfRangeException

如何解决《Queryable.Single上的IndexOutOfRangeException》经验,为你挑选了0个好方法。

我有一个ASP.NET网站已经运行了很长时间,最近没有任何改变.从一小时到下一小时,我开始在一行中接收一个IndexOutOfRangeException,我在这里执行LINQ查询:

var form = SqlDB.GetTable()
    .Where(f => f.FormID == formID)
    .Single();

ORMB.Form是一个POCO对象,LINQ to SQL属性将其映射到MSSQL表(映射验证为正确).堆栈跟踪如下:

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at System.Collections.Generic.List`1.Add(T item)
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Linq.Queryable.Single[TSource](IQueryable`1 source)
   at GetForm.Page_Load(Object sender, EventArgs e)

反映System.Collections.Generic.List.Add显示以下代码:

public void Add(T item)
{
    if (this._size == this._items.Length)
    {
        this.EnsureCapacity(this._size + 1);
    }
    this._items[this._size++] = item;
    this._version++;
}

唯一应该倾向于IndexOfOutRangeException的行是this._items [this._size ++] = item,但我看不出我是如何影响它的.

我可以通过执行appdomain循环来解决问题,所以它必须以某种方式缓存相关.如果重要的话,DataContext上的ObjectTracking被关闭.

我的直觉是,这可能是一个线程问题,SqlConnectionManager在名为"users"的List字段中缓存了IConnectionUsers.如果两个线程同时进入Add方法,则会阻止以下情况发生:

T1: Add(x)
T2: Add(y)
T1: Since _size == _items.Length: EnsureCapacity(_size + 1)
T2: Since _size > _items.Length: _items[_size++] = item;
T1: _items[size++] = item <- OutOfRangeException since T2 didn't increase the capacity as needed

任何人?

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有