데이터베이스에서 페치 할 때 내 응용 프로그램에서 OutOfMemory 예외가 발생합니다. Linq2Sql을 사용하는 C# .Net 응용 프로그램입니다.Linq2Sql 메모리 부족 예외
을 사용하여 데이터베이스 호출 전후의 메모리 사용량을 확인하려고했습니다. 이 일은 벌어지고있는 일에 대해 아주 정확하지는 않지만 훌륭합니다. 나는 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은 실험 목적으로 선택된 페이지 크기이며, 모두 처리해야하는 좌표계를 프리 페칭합니다. 그래서 저는 그것들을 엔티티 목록에 저장하고 다른 좌표가 필요할 때마다 새로운 DB 연결을 만들어야하는 대신 거기에서 액세스합니다. – Keller