문제

내가 쓴 사용자 지정 복제의 기능에는 표준 C#windows 양식 응용 프로그램으로 SQL Server2008 익스프레스 데이터베이스입니다.그것은 기본적으로 아래로 끌어 세트는 sql 문을 실행해야에 대하여 가입자 데이터베이스입니다.에 완전한 이것은 새로 실행할 수 있습니 200k+필요가 있는 문을 실행할 수 있습니다.

저는 처리는 이러한 문 안에서의 코드 블록 다음과 같습니다:

using (SqlConnection connection = ConnectionManager.GetConnection())
{
     connection.Open();

     SqlTransaction transaction = connection.BeginTransaction();

     // Process 200k+ Insert/Update/Delete statements using SqlCommands

     transaction.Commit
}

내가 찾는 것은 내 응용 프로그램 메모리 사용량은 남아 있는 매우 안정적 약 40mb 을 위한 첫 번째 30k 문입니다.후에는 갑자기 이동하려 주변 300mb 한 후 성장까지 충돌 OutOfMemory 예외는 아니다.

은 방법을 사용하는 것도 가능할 수 있 프로세스는 많은 제표에서 다루는 내용의 일부는 다음과 같은 트랜잭션?나는 내가 이것을 할 수 있다.이 있을 경우는 더 나은 방법으로 난 사랑하는 여기에.나이 필요합 트랜잭션 그렇지 않으면 부분적인 복제를 초래 깨진 데이터베이스입니다.

감사합니다.

편집:

다시 시작한 후 내 컴퓨터리 전 200k+복제를 통해 이동합니다.비록 그것에서 한 점에서 성장하는 메모리 사용량 1.4Gb 후 복제 완료 메모리 사용량이 떨어졌다에 모든 방법을 40mb.에 이르는 나에게는 결론을 내가 내 루프는 프로세스 명령을 일으키는 성장을 메모리에서 아마도.

도움이 되었습니까?

해결책

당신은 당신 Disposing 귀하의 형태 및 처분할 수 있는 컨트롤을 닫기 전에?

Wrap 모든 처분할 수 있는 객체에 사용하는 문입니다.자세한 내용은 여기를 클릭하십시오


지 않는 열기/닫기 연결고 대신에 보낼 데이터를 데이터베이스에서 하나의 트랜잭션이 있습니다.자세한 내용은 여기를 클릭하십시오


여전히 귀하의 응용 프로그램은 잡음 많은 메모리를 그런 다음 의사가 필요할 같은 레드 게이트 메모리 개미 프로파일.을 보려면 여기를 클릭하십시오 그것에 대해 더 자세한 정보

enter image description here


처리할 수 있는 많은 문 안에 하나의 트랜잭션?

당신은 아래 옵션을 작업을 수행합니다.

  1. Bulk insert oprate 기록 Stored Proc.
  2. 준비 XML 보내는 문자열에서 Database.
  3. 보내는 읽기 전용 DataTable 에서 Sql 서버를 통해 저장 Proc

샘플 저장 Proc

Begin Try
    Set NoCount ON
    Set XACT_Abort ON
    Begin TRan
        --Your queries
    Commit Tran

Begin Tran

Begin Catch
    Rollback Tran
End Catch

을 확인하십시 Dispose 체되면 사용하지 않습니다.


그것은 다음과 같이해야한다

using (SqlConnection connection = new SqlConnection())
{
    connection.Open();
    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        transaction.Commit();
    }
}

당신은 확인 SqlCommand 또한?

using (SqlCommand cmd = new SqlCommand())
{
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top