2014-12-16 3 views
0

좋아, 그래서 나는이 회사에 왔는데, 그 소프트웨어는 근해에서, 더 이상 존재하지 않는 실재물에서 되 불러 냈다. 우리 모두는 훈련을 알고 있습니다.Entity Framework 응용 프로그램이 멀티 스레드인지 어떻게 알 수 있습니까?

너트와 볼트를 보면서 '잠금'키워드를 발견했습니다. 인터넷 검색, Entity Framework에서 멀티 스레딩을 지원하지 않습니다.

내 질문은 : 응용 프로그램이 여러 스레드에서 실행하려고하는 것을 어떻게 확신 할 수 있습니까? '잠금'키워드의 존재가 충분한가요?

감사합니다.

+0

'은 MSDN documenation 따라, [로크 (http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx) 키워드는 하나 개의 스레드가 다른 스레드의 상태 코드 임계 영역을 입력하지 않는다고 보장 중요한 부분에 있습니다. 다른 스레드가 잠긴 코드를 입력하려고하면 객체가 해제 될 때까지 블록을 기다립니다. '실행하지 않아도 여러 스레드를 실행중인 것은 아닙니다. –

+0

저는 EF에서 멀티 스레딩을 자주 사용합니다. 예를 들어 업데이트 할 직원 목록이있을 수 있으므로 각 직원마다 스레드를 스핀하여 변경 사항을 채 웁니다. EF 자체는 누가 그것을 언제 부르는지 신경 쓰지 않습니다. 내 상황에서; 나는 본질적으로 "전체적으로 포함 된 작품을 다른 활동에 영향을 미치지 않으면 서 스레드로 분리 할 수있다"는 작업 단위 패턴을 알면 문제가 발생하지 않도록 항상주의해야합니다. 개인적으로 EF와 함께 LOCK을 사용하지 않습니다. –

+0

좋은 대안은 응용 프로그램에서 생성 된 관리되는 스레드를 계산하거나 열거하는 것입니다. 1보다 크면 다중 스레드가되지만 아무도 프로그램 방식으로 실행할 수있는 솔루션을 찾을 수없는 것 같습니다. 자세한 내용은 [어떻게 C#의 모든 관리되는 스레드를 열거 할 수 있습니까?] (http://stackoverflow.com/questions/466799/how-can-i-enumerate-all-managed-threads-in-c)를 확인하십시오. –

답변

0

잠금 키워드만으로는 충분하지 않으며 결국에는 잘못 사용했을 수 있습니다. 잠금은 단지 한 번에 둘 이상의 스레드가 보호 영역으로 들어가는 것을 막을 것입니다. 자물쇠로 보호 받고있는 것은 무엇입니까? 정적 변수에 저장된 데이터는 앱을 사용하는 모든 사용자 (스레드)가 사용할 수 있으므로 액세스가 제어되어야합니다.

+0

실제 오류 메시지는 "모델을 만드는 동안 컨텍스트를 사용할 수 없습니다.이 예외는 컨텍스트가 OnModelCreating 메서드 내에서 사용되거나 동일한 컨텍스트 인스턴스가 여러 스레드에서 동시에 액세스되는 경우 throw 될 수 있습니다. DbContext 및 관련 클래스의 스레드 안전성이 보장되지 않습니다. " 하지만 문구를 어떻게 쓰는지 모르므로 질문 할 수는 없으므로 멀티 스레드 환경에 있는지 알아야합니다. ... – user426364

+0

... 내가 멀티 스레드인지 아닌지 알 수있는 방법에 대한 의견을 추가하면 답변으로 받아 들일 수 있습니다. thread.start 코드를 검색합니까? (없음).사실, 저는 그것을 받아 들일 것입니다, 원한다면 덧글을 달 수 있습니다. 나는 올바른 질문을하는 법을 아직 모르는 그런 EF 놈입니다. – user426364

1

이것은 ASP.NET/MVC 웹 응용 프로그램은 당신이 응용 프로그램은 IIS에와 IIS가 다른 스레드에 다른 사용자 요청을 전달하기 때문에 웹 응용 프로그램이 멀티는 스레드가되기 때문에 아마도 잠금 키워드가있는 경우.

MVC의 경우 요청 당 컨트롤러가 생성 된 다음 다른 스레드에서 처리됩니다. 따라서 한 번에 두 명의 사용자가 액세스하려면 무언가를 잠글 필요가 있습니다.

이 앱이 데스크톱 앱이고 데이터 액세스가 이루어지는 곳이 잠금 인 경우 유사한 목적으로 사용할 수 있습니다.

+0

예, 잠금은 dbContexts의 add 또는 addRange 섹션에 있습니다. 기본적으로 여러 개의 dbContexts가있는 것처럼 보이며 잠금은 목록에 추가하는 동안 발생합니다 (클래스는 DbContextList : List 임). – user426364

관련 문제