索引在长时间空闲后超出了数组错误的范围



我有这样的类,从数据库中读取数据一次,并将其保存在内存中。

public class PlanetService
{
private List<Planet> planets = new List<Planet>();
public List<Planet> FindAll()
{
if (!planets.Any())
{
planets.AddRange(GetAllPlanetsFromDataBase());
}
return planets;
}
public List<Planet> FindByName(string name)
{
if (!planets.Any())
{
planets.AddRange(GetAllPlanetsFromDataBase());
}
return planets.Where(x => x.Name == name).ToList();
}
}
public class Planet
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class Lookup
{
public Lookup(string value, string label)
{
Value = value;
Label = label;
}

public string Value { get; set; }
public string Label { get; set; }
}

它的用法如下

var lookupList = planetService.FindAll().Select(x => new Lookup(x.Id.ToString(), x.Name)).ToList();

最初的工作方式与预期一致。但是时不时地,通常在很长空闲时间之后,会出现以下错误

[IndexOutOfRangeException: Index超出数组中。System.Collections.Generic.Enumerator.MoveNext()
system . linq . whereselectlisttiterator '2.MoveNext()
System.Collections.Generic.List'1..
System.Linq.Enumerable。ToList (IEnumerable ' 1源)

数据库中总有行星。即使不是,它也应该返回一个空的查找列表,不应该抛出一个IndexOutOfRangeException,对吧?

一旦发生此错误,随后的页面刷新将一直显示此错误,并且在一段时间内不会消失。

由于其他数据库调用正在工作,我认为这与连接无关。

这只发生在生产环境中,我还无法在开发环境中重新创建这个问题。

根据我的经验,当您尝试序列化大量数据时,通常会出现这种例外,通常是来自数据库的大量单列。

您从数据库中检索的任何列是否包含异常大量的数据?

我们有一个REST API,它有同样的异常,原因是DB中的一列由于自引用错误而增长到GB的大小。