2013-11-22 8 views
1

내 MVC4 앱은 코드 우선 Entity Framework 5.0을 사용합니다. 타이머 스레드에서 SQL Server 데이터에 액세스하려고합니다. 기본 ASP.NET 작업자 스레드에서 사용하는 동일한 파생 DbContext 클래스의 인스턴스를 인스턴스화하고, 사용하고, 처리 할 수없는 이유가 있습니까? (예, 나는 동일한 using() 패턴을 사용하여 인스턴스를 만들고 사용하고 주 스레드에서 개체를 처리합니다.)백그라운드 스레드에서 DbContext 사용

약간의 문제 컨텍스트 : 내 웹 사이트에 데이터베이스의 테이블에 WebsiteEnabled 필드가 있습니다. 현재, 나는 그 값을 읽을 각 GET 요청에 대한 데이터베이스 가져 오기가 발생합니다. 백그라운드 스레드에서 매 15 초마다 값을 읽도록 코드를 변경하고 GET 요청을 읽을 수있는 정적 변수에 값을 저장하려고합니다. 동일한 스레드에서 동일한 DbContext의 여러 인스턴스를 인스턴스화하려고하면 문제가 발생한다는 것을 알고 있습니다. 동일한 제한이 다른 스레드의 동일한 DbContext 인스턴스에 적용되는지 확실하지 않습니다.

+1

우리는 이메일을 확인하고 자주 청소하기 위해 배경 스레드도 사용합니다. 백그라운드 스레드에서 새 컨텍스트를 작성 (및 파기)하고 기본 애플리케이션 스레드의 컨텍스트를 사용하지 않는 한 괜찮습니다. DbContext는 스레드로부터 안전하지 않으므로 여러 스레드에서 공유 할 수 없습니다. 그렇다고해서 각각 db 컨텍스트의 고유 한 복사본을 가진 다중 스레드를 가질 수는 없습니다. 동시성 문제 (동시에 행을 업데이트하려고 시도하는 경우)에주의해야합니다. – Tommy

+0

@ 토미 : 고마워. 코멘트가 아닌 답변으로 작성하여 답변으로 받아 들일 수 있습니다. –

+0

Bob, 답변으로 게시 됨. DbContext를 단일 스레드로 로컬 화하는 한 아무 문제가 없어야합니다. – Tommy

답변

1

우리는 이메일을 확인 할뿐만 아니라 백그라운드 스레드를 사용하여 우리의 큰 MVC 응용 프로그램 중 하나에 너무 자주 모든 정리 작업을 수행. 백그라운드 스레드에서 새 컨텍스트를 작성 (및 파기)하고 기본 애플리케이션 스레드의 컨텍스트를 사용하지 않는 한 괜찮습니다. DbContext은 스레드로부터 안전하지 않으므로 여러 스레드에서 안전하게 공유 할 수 없습니다. 그렇다고해서 각각 db 컨텍스트의 고유 한 복사본을 가진 다중 스레드를 가질 수는 없습니다. 유일한주의 사항은 동시성 문제 (동시에 행을 업데이트하려고 시도)에주의하십시오.

1

통계 및 EF는 혼란에 대한 처방입니다. asp.net에서 1 개의 응용 프로그램 풀, 많은 스레드. 컨텍스트가 아닌 필수 항목이라면 통계를 저장하십시오. 그래서 항상 각 스레드가 자신의 컨텍스트를 얻는 지 확인하십시오.

하지만 주어진 문제를 해결하려면 캐시 된 값이 있어야하는 컨트롤러에서 을 사용하는 간단한 해결책이 있습니다. GET 방법 특정 기간 동안 ID 당 캐시 할 수 있습니다 ... 가치있는 체크 아웃. IIS, ASP.NET을 사용해보십시오. :-)

[OutputCache(Duration = int.MaxValue, VaryByParam = "id", Location = OutputCacheLocation.ServerAndClient)] 
    public ActionResult Get(string id) { 
     // the value that can be cached is collected with a NEW CONTEXT ! 
+0

이 답변을 이해할 수 없습니다. 페이지 출력을 캐시하고 싶지 않습니다. 데이터베이스 읽기 작업을 캐시하고 싶습니다. 좀 더 완벽한 예제를 게시 할 수 있습니까? –

+0

dbcontext는 스레드로부터 안전하지 않습니다. App 풀은 여러 스레드를 사용합니다. 이 예에서는 IIS를 사용하여 ID xyz에 대한 정보 얻기 결과를 캐시합니다. 이렇게하면 읽은 결과가 캐시됩니다. 캐싱은 매우 일반적인 요구 사항입니다. 기존 기능을 재사용하는 것이 제 제안입니다. OutputCache 특성을 조사하십시오. –

관련 문제