从数据库中获取数据时,我在应用程序中遇到了OutOfMemory异常。它是一个使用Linq2Sql的C#.Net应用程序。Linq2Sql内存不足异常
我试过使用GC.GetTotalMemory()
来查看调用数据库之前和之后占用了多少内存。这给出了一个很好的,但不是很准确的图片。当我看到在Windows任务管理器,我可以看到山顶工作集是不小的使用下面的代码获取分页的方式中的数据时:
public static void PreloadPaged()
{
int NoPoints = PointRepository.Count();
int pagesize = 50000;
int fetchedRows = 0;
while (fetchedRows < NoPoints)
{
PreloadPointEntity.Points.AddRange(PointRepository.ReadPaged(pagesize, fetchedRows));
PointRepository.ReadPointCollections();
PreloadPointEntity.PointCollections.Count());
fetchedRows += pagesize;
}
}
private static List<PointEntity> ReadPaged(int pagesize, int fetchedRows)
{
DataModel dataContext = InstantiateDataModel();
var Points = (from p in dataContext.PointDatas
select p.ToEntity());
return Points.Skip(fetchedRows).Take(pagesize).ToList();
}
我想这是一个使用了该LINQ2SQL代码记忆,而不是重复使用或事后释放,但我能做些什么来获得记忆足迹?
我观察到它使用10倍的内存来获取数据,因为它将它们存储在我的物品列表中。我曾考虑调用垃圾收集器,但我宁愿避免它。
为什么你需要'50000'行被一次性检索? –
你打算如何进一步处理这些实体? –
50000只是我的页面大小选择用于实验目的,我预取的坐标网格都必须处理。所以我只是将它们存储在一个实体列表中,并从那里访问它们,而不是每次需要另一个坐标时都必须创建一个新的数据库连接。 – Keller