2012-04-01 2 views
0

.NET 3.5 프로젝트에서 작업 중이며 여러 DataTables 및 DataTables 간의 관계가있는 DataSet을 사용하게됩니다. DataTables를 채우기 위해 SQL에서 특정 양의 레코드를 가져 와서 해당 레코드를 처리합니다. 레코드 처리가 끝나면 DataSet을 지우고 다음 레코드 집합을 가져 오려고합니다. Clear() 메서드가 메모리에서 행을 지우지 않는다는 것을 읽었습니다. 레코드를 가져 오는 동안 메모리가 계속 증가하지 않으면 서 DataSet을 재사용 할 수 있습니까?메모리 문제가없는 동일한 DataSet을 다시 사용하십시오.

+0

선택 기준을 변경하고 다시 채우기를 호출하십시오. 테이블이나 관계가 변경된 경우에만 데이터 세트를 망칠 필요가 있습니다. 그런 다음 새 데이터 세트를 만들어 처리 함수에 전달하면됩니다. –

+0

여기 내 관심사는 기억에 관한 것입니다. 이 프로세스는 수 시간 동안 실행되는 수천 개의 레코드에서 작동합니다. 메모리가 올바르게 관리되고 있는지 확인해야합니다. – user31673

+0

그러나 DataRow가 더 이상 참조되지 않으면 GC에서 제거해야합니다. 지우기 또는 채우기를 수행하면됩니다. 조기에 최적화 된 것 같아서 관심사가 정당한 지 알아 내면 간단한 POC 스타일 시험이 가능합니다. –

답변

1

MSDN은 the DataSet.Clear method clears the DataSet of any data by removing all rows in all tables.입니다. 모든 테이블과 관계를 그대로 유지하지만 모든 행을 지 웁니다.

어디서 읽었습니까?

+0

다음 링크에서 Microsoft 직원의 응답을 읽으면 http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/41e1b19a-b5ee-4cf2-ac1e-ff0c9a35b961을 볼 수 있습니다. DataSet.Clear() 및 DataSet.Dispose()는 GC로 행을 지우지 않습니다. .Clear() 메서드는 데이터 집합 내부의 모든 데이터 테이블에있는 모든 데이터 행을 제거합니다. 또한 .Dispose() 메서드는 DataSet MarshalByValueComonent의 기본 클래스로 구현되므로 데이터 집합의 관리되는 리소스를 해제하지 않습니다. – user31673

+0

행이 지워지고, 메타 데이터 (테이블 관계 등이 아님)가 좋다고 말하면서, 당신이 원하기는 쉽지 않기 때문에 좋습니다. 메타 데이터가 각각 다르면 null을 지정하거나 새 메타 데이터에 할당합니다. –

관련 문제