Dapper를 사용하여 OleDbConnection.Query에서 System.AccessViolationException 발생

.net c# dapper oledb vb.net

문제

.Net 4.0에서 OleDbConnection 을 사용하여 ACE OleDb 12.0 엔진으로 Microsoft Access 2010 데이터베이스를 쿼리합니다. 약 60 개의 가능한 병렬 스레드가 있기 때문에이 프로세스가 초당 많은 수의 쿼리를 실행할 가능성 이 있습니다 (이 기사를 읽은 후 TPL에 ThreadPool 제한을 설정했습니다). mdb 파일은 네트워크 드라이브에 있습니다. 다음 코드를 사용하여 각 쿼리에 대한 연결을 만들고 처리합니다.

Using connection As New OleDb.OleDbConnection(connectionString)
    result = connection.Query(Of Foo)(query, New With {.Param1 = param1, .Param2 = param2}).FirstOrDefault()
End Using

때때로 무작위 적으로 connection.Query 에 대한 호출 System.AccessViolationException in System.Data.dllSystem.AccessViolationException in System.Data.dll 이 발생 connection.Query . 이 예외는 언 매니지 코드에 의해 발생한다고 가정되지만 관리되지 않는 코드를 직접 사용하지는 않으므로 Query 호출 후에 발생합니다. 나는 또한 분명히 멀티 스레딩과 관련된 문제가 아니 었는지 확인하고 싶었지만, 문서를 올바르게 이해한다면 쿼리 당 하나의 IDbConnection 사용하여 스레드로부터 안전해야하며 Dapper는 스레드로부터도 안전해야합니다.

오류가 항상 같은 쿼리 또는 POCO 유형에서 발생하는 것은 아니며 하드웨어 (CPU <50 %, 메모리 <75 % 및 내 프로세스가 250MB 이상을 먹지 않음)에서 문제가되지 않을 수도 있습니다. SQL Server에 대한 SqlConnection 에서 비슷한 코드에 대한 문제를 아직 보지 못했습니다.

또한 VS Express 2012로 작업 중이므로 "예외시 중단"을 구성한 경우에도 예외 도우미를 사용하여 문제를 해결할 수는 없습니다. 메모리 관련 예외이므로 OutOfMemoryException을 catch하고 싶지 않기 때문에 스택에 예외를 잡으려는 것이 분명하지 않습니다.

내가 뭔가 잘못하고 있는거야? 이것을 디버깅 할 수있는 방법이 있습니까? 단지 때때로 발생하기 때문입니다. 이것이 Dapper 나 OleDb 엔진의 버그 일 수 있습니까?

수락 된 답변

나는이 문제가 여러 스레드가 Access DB에 충돌하는 것으로 의심된다. 지금까지 내가 알고있는 한, MS Access 동시성에 한계가 있기 때문에 multi-threaded 응용 프로그램 용으로 설계 되지 않았습니다 .

이의 IT에 대한 많은 문서는 아니지만, 그것은 언급 here MS 액세스가 높은 스트레스와 높은 동시성을 위해 설계되지 않았는지 확인합니다.

편집 : 의견을 기반으로

  1. 스테이징 프로세스로 액세스 데이터베이스를 SQL Server로 직접 덤프 한 다음 스테이징 테이블의 데이터에 대한 .Net 코드를 SQL의 최종 테이블로 실행할 수 있습니다.
  2. SSIS data flow to manipulate the data 사용하여 .Net 코드에 대한 스크립트 작업을 사용하여 SSIS data flow to manipulate the data 수 있습니다.
  3. Reactive Extensions 가 버퍼를 사용하여 데이터를 스트리밍하는 대형 2GB CSV 파일에서 사용되는 과정을 보았습니다. 따라서 ms 액세스 데이터를 CSV에 덤프 할 수 있으면 유사한 프로세스를 메모리에서 실행할 수 있습니다.


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.