나는 스레드 풀을 사용하여 무거운 프로세싱과 SQL의 비트도 수행합니다. 현재 SQL 연결을 필요로 할 때 열어 쿼리를 실행 한 다음 닫습니다. 이것은 잘 작동합니다. 응용 프로그램이 아무 문제없이 실행되었습니다. 이 응용 프로그램이 더 많은 작업을 수행함에 따라 더 많은 스레드가 사용됩니다. 스레드가 많으면 SQL 연결을 더 많이 열고 닫을 수 있습니다. SQL 2005에서는 실제로 서버를 해머합니다. 내 테스트 서버는 약 175 회의 트랜잭션을 수행 중입니다. 약 150 개가 master 데이터베이스에서 실행되며 "ValidateSQLLogin"입니다.스레드 안전성에 대한 질문
각 스레드마다 자체 연결이 있고이 연결이 스레드 주위로 전달되도록 앱을 변경하려고합니다.
그래서 내 질문은 : SQL 연결 개체가 스레드에 로컬로 생성 한 다음이 안전하지 않은 것 또 다른 클래스의 정적 기능에 심판에 의해 전달되는
경우?
void ThreadA()
{
SqlConnection a = new SqlConnection(....);
MyStaticClass.DoStuff(ref a);
}
void ThreadB()
{
SqlConnection b = new SqlConnection(....);
MyStaticClass.DoStuff(ref b);
}
static void MyStaticClass.DoStuff(ref SqlConnection sql)
{
// Do stuff with sql
}
내 초기 생각은 10 개 스레드가 모두 각각 자신의 연결 개체를 통과, 같은 시간에 같은 정적 함수를 호출 할 수 있기 때문에이 안전하지 않을 것입니다.
이전에는 정적 함수가 자체 연결을 열고 완료되면 닫았습니다.
안전하지 않은 경우이 문제를 해결하는 가장 좋은 방법은 무엇입니까? SQL 연결 열기/닫기를 최소화하고 최소화해야합니다.
감사
레
동일한 연결을 공유하면 다음과 같은 질문이 제기됩니다. 연결이 유효하지 않으면 어떻게 복구합니까? – lsalamon