2012-07-23 2 views
1

다음과 같은 게시물을 읽었습니다 : Is it OK to use static variables to cache information in ASP.net?..net 공유 변수

정적 변수의 가시성을 이해하려고합니다. 하나의 ASP.NET 프로세스 (W3WP)가 있습니다 - 웹 가든이 존재하지만 실상은 하나입니다 - 여러 클라이언트가 연결할 수 있습니다. 이러한 클라이언트 중 하나가 정적 (공유) 정수를 10으로 설정하면 모든 웹 클라이언트가 공유 변수를 10으로 간주합니까? 공유 변수가 응용 프로그램 설정 또는 세션 설정과 같은지 이해하려고합니다.

VB.NET (클라이언트 응용 프로그램)에도 적용됩니다. 여러 개의 VB.NET 클라이언트가 단일 응용 프로그램 도메인을 사용할 수 있도록 허용하는 것에 관한 기사를 읽었습니다. 정적 변수는 모든 클라이언트에서 단일 앱 도메인으로 공유됩니까?

답변

3

정적/공유 변수가 AppDomain 단위이므로 해당 AppDomain의 모든 클라이언트에 동일한 값이 표시됩니다. 응용 프로그램 설정과 광범위하게 비교됩니다.

(경고 :. 필드가 [ThreadStatic]을 표시하지만 웹 응용 프로그램에서 정말 나쁜 생각하지 않는)

당신은 특히 정적/공유 필드를 사용하여 매우주의 이어야한다 스레드 환경. 사용자/세션간에 상태가 잘못 출혈되는 것 외에 본질적으로 스레드 안전 문제가 있으며 일반적으로 매우 신중하게에 대한 액세스를 동기화하려고합니다. 예를 들어 정적 인 List<T>은 여러 스레드가 동시에/etc를 추가/제거 할 수있는 경우 매우 위험합니다.

+0

이것이 VB.NET (양식)에도 적용된다는 것을 확인할 수 있습니까? – w0051977

+0

@ w0051977 : 그렇습니다.'Shared' (정적) 변수는 항상 AppDomain 단위이며,' '이라면 스레드 단위입니다. –