2010-04-30 3 views
1

누군가가 ASP.Net 응용 프로그램의 컨텍스트에서 조언 해 줄 수 있습니까? 모든 사용자에게 공통된 공유/정적 기능입니까?공유/정적 함수에 특정한 ASP.Net 아키텍처

예를 들어 당신이 함수

Public shared function GetStockByID(StockID as Guid) as Stock 

이 응용 프로그램의 현재의 모든 사용자에게 공통 그 함수가있는 경우? 또는 공유 기능은 현재 사용자에게만 한정적이며 현재 사용자의 컨텍스트에서만 공유됩니까?

그래서 더 구체적으로 내 질문은 테이블 잠금과 같은 데이터베이스 동시성 문제 외에도 ASP.Net 응용 프로그램의 공유 함수에서 스레딩 문제에 관심을 가져야합니까?

내 머리에; 내 응용 프로그램 네임 스페이스가 MyTestApplicationNamespace라고 가정 해 봅시다. 새 사용자가 내 사이트에 연결할 때마다 MyTestApplicationNamespace의 새 인스턴스가 만들어 지므로 모든 공유 기능이 해당 인스턴스와 사용자에 공통되지만 여러 사용자에게 공통된 것은 아닙니다. 이 올바른지?

답변

2

런타임에 네임 스페이스 인스턴스가 "생성"되지 않습니다. 이것을 하드 디스크의 디렉토리와 같이 코드 구성 방법으로 생각하십시오.

공유 메소드는 객체를 인스턴스화하지 않고 실행할 수있는 코드 덩어리로 생각합니다. 따라서 모든 사용자는 코드를 통해 자신 만의 논리적 독립 프로세스를 실행하게됩니다.

당신은 같이 할 수있는 각 사용자에 의해 공유되는 단일 개체를 원하는 경우 다음

 public class cApp 
     { 

       static readonly cDB _cDB = 
new cDB(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString); 


       public static cDB DB 
       { 
        get 
        { 
         return _cDB; 
        } 
       } 

     } 

이 방법으로 저장이 스레드에 터치 처음 타입 CDB의 단일 객체를 인스턴스화 . 속성 DB를 통해 코드에서 사용할 수있는 _cDB라고합니다. Like :

cApp.DB.MyMethod(); 

이것은 하나의 인스턴스가 인스턴스화되지만 다시 한 번 각 사용자가 독립적으로 코드를 실행합니다. 따라서 private 변수의 값은 각 프로세스 (예 : 연결 문자열)에서 볼 수 있지만 로컬 변수를 설정하는 로컬 메서드는 동일한 코드를 실행하는 다른 프로세스에는 영향을 미치지 않습니다.

+0

indepth 답변을 주셔서 대단히 감사합니다 ... –

0

모든 것이 항상 표시됩니다. 클래스, 정적 함수, 클래스의 함수 등이 있습니다. 상수가 아닌 유일한 것은로드 된 데이터입니다.

정적 데이터는 여러 요청간에 남아 있습니다 (응용 프로그램을 플러시 할 수 있습니다). 일반적으로 요청에 따라 원하는 객체/데이터를로드하고 원하는 방식으로 표현합니다.

정적 데이터에서 작동하는 정적 함수는 스레딩 문제를 인식하고 있어야합니다.

관련 문제