2011-01-12 3 views
0

네트워크 드라이브에있는 액세스 데이터베이스에서 데이터를 행으로 내보내고 있습니다. 현재 다음 C# 코드를 사용합니다.네트워크 드라이브의 액세스 데이터베이스에 대해 실행할 때 OLEDB가 느립니다.

using(OleDBCommand oleDBCommand = new oledbcommand(insertstring,conn)) 
{ 
    OleDbParameter param = new OleDbParameter(); 
    param.ParameterName = " .. "; 
    oleDbCommand.Parameters.Add(param); 
    .... 
    .... 
    ....     

    foreach(Row row in rows) 
    { 
     oleDBCommand.parameters.add["asd"].value= row.o; 
     .... 
     .... 

     oleDCCommand.executenonquery(); 
    } 
} 

100,000 개의 행을 내보내는 데 약 1 분이 걸립니다. 그러나 네트워크 드라이브에있는 데이터베이스로 내보낼 때는 약 1 시간이 걸립니다. 이 hickup의 원인은 무엇이며이를 해결하는 방법은 무엇입니까?

Microsoft.ACE.OLEDB.12.0 EDIT : 네트워크 드라이브는 로컬에서 네트워크로 100mb 파일을 이동하는 데 몇 분 정도 걸립니다.

답변

1

증거를 감안할 때 네트워크 대기 시간 외에는 대답이 없습니다. 내가 제안하는 바는 로컬 및 네트워크 드라이브에서 작은 배치를 시도하고 어떻게 수행하는지 확인하는 것입니다. 예를 들어, 100, 1000 및 10000의 배치를 시도하고 숫자를 비교하십시오. 차이가 선형 적으로 조정되는 경우, 즉 네트워크 드라이브가 항상 60 배 느린 경우 대기 시간입니다. 특정 숫자 (또는 특정 레코드까지)가 될 때까지 두 번 속도가 느려지면 버퍼가 고갈되는 것과 같은 것 또는 다른 것입니다.

희망이 도움이됩니다.

+0

이 문맥에서 어떤 대기 시간이 의미하는지 설명해 주시겠습니까? 그리고 내가 100 MB 파일을 옮길 때 왜 그렇게되지 않습니까? – willem

+0

대기 시간이란 비트를 전송하는 데 필요한 선형 시간과 관련이없는 고정 된 시간 블록을 의미합니다. 여러 대기 시간이있을 수 있으므로 처음에는 선형으로 보일 수 있습니다. 테스트 만하면됩니다. 왜 그런 일이 일어나지 않을지에 대해서는 OLEDB 네트워크 경로의 세부 사항 때문일 것입니다. 100MB 파일을 전송할 때 네트워크 모델의 하위 레벨에서 전송되기 때문에 전송되지 않습니다. –

관련 문제