2009-09-23 5 views
0

메소드에 대한 호출을 병렬로 만들고 싶습니다. 이 방법에서는 몇 가지 값 (매우 빠름)을 계산하고이 계산 값을 데이터베이스 테이블에 씁니다.스레드가 MySqlCommand.ExecuteNonQuery()에 걸렸습니다.

따라서 내가 계산 잠시 후 스레드 풀

ThreadPool.QueueUserWorkItem((state) => { 
       method(); 
      }); 

를 사용 (결정하지, 이런 시간이 때로는 몇 시간 후에, 때로는 몇 분 후, 다름) 스레드 풀 전체는 아니지만 메서드()의 스레드가 있지만 내 mysql 클래스의 스레드는 MySqlCommand.ExecuteNonQuery을 호출합니다.

누구나 이것을 피하는 방법을 알고 있습니까? mysql 클래스의 문서에서 실행중인 쿼리를 종료 할 수는 없지만 이러한 문제를 피하는 방법을 찾았습니까?

답변

5

계산 된 DB에 모든 값을 기록해야합니까 아니면 몇 개가있을 때까지 기다릴 수 있습니까? 많은 값을 삽입 할 때 배치 업데이트를 수행 할 수 있습니까?

모든 스레드가 동시에 같은 테이블에 쓰려고하면 잠금 문제가 발생할 수 있습니다. 숫자를 로컬에 저장 한 다음 하나의 큰 일괄 처리로 제출하십시오.

+0

이제 목록에 쿼리를 추가하고 매분마다이 목록을 보내십시오. 그러나 이제는 내 스레드 내에서 목록을 채우고 1 분 후에 쿼리에서 목록의 열거 형이 스레드 내에서 변경되면 어떻게됩니까? 나는 잠금 장치 (목록) {// 쿼리 보내기}를 시도했으나 작동하지 않습니다. –

+0

오 ... 잠금 메커니즘에 대한 오해가 있었다고 생각합니다. 목록을 보낼 때와 목록을 채울 때 다른 개체를 잠급니다. –

관련 문제