1MB의 행에 대해 DataTable을 사용하지 않는 것이 좋습니다. INSERT에 대해 새 SqlComand를 만들고 모든 테이블 필드를 매개 변수로 만들고 루프에서이 명령을 실행하면됩니다. 하고 얼마나 많은 확인, 지금까지의 당신은 데이터 행을 읽을 때)
1 : 이미 DataTable을 사용하여 코드를 많이 쓴 경우
, 당신은 버퍼로 고려, 다음과 같은 해결 방법이있을 수 있습니다 이미 읽은 적이 있습니다.
2) DataTable.Update()를 실행하면 바로 10K 개의 행을 얻습니다.
당신은)
DataTable.Clear();
DataTable.AcceptChanges();
4
를 호출하여 당신이 DataTable의 모든 데이터를 정리 한 후) (당신은 BUFFER_SIZE으로이 매개 변수를 호출하고 하드 코딩을 피하기 위해 구성 어딘가에 넣을 수)
(3) 파일에서 데이터 계속 읽기, 루프 반복
또한 파일 구조 및 목적을 알지 못해도 일반적인 제안을하기는 어렵습니다. 매우 큰 데이터 세트를 사용할 때 "메모리 부족"을 피하는 방법에 대한 질문에만 답변했습니다. http://msdn.microsoft.com/en-us/library/ms188365.aspx
- 그러나 나는 또한
1) 대량 삽입
로, 중간 데이터의 저장 및 가능한 모든 SQL 서버가 제공하는 의미로 직접 처리 파일로 .NET 데이터 테이블을 사용하지 않도록 가능한 모든 옵션을 고려하는 것이 좋습니다 2) bcp 유틸리티 -
http://msdn.microsoft.com/en-us/library/ms162802.aspx
3) MS SQL Intergartion 서비스 - 그 명령과 도구를 사용하여 http://msdn.microsoft.com/en-us/library/ms141026.aspx
대량 삽입 작업은 .NET에서 시작할 수 있습니다.
추천하지 않는 이유는 무엇입니까? SqlBulkCopy와 페어링하는 것은 어떻습니까? –
대량 복사와 페어링 할 수 있지만 SqlCommand를 사용하기 때문에 메모리가 부족합니다. 메모리의 DataTable 크기가 매우 커서. 대량 복사는 INSERT 작업의 속도를 최적화 할 수 있습니다. 위에서 2에서 제안한 솔루션에서 SqlBulkCopy.WriteToServer를 사용하십시오. –