사용

2010-02-05 9 views
2

내 asp.net 페이지사용

private static Dictionary<string, List<Guid>> OpenNodes = new Dictionary<string, List<Guid>>(); 
//Page start 
if(!OpenNodes.ContainsKey(Session.SessionID)) 
{ 
    List<Guid> list = new List<Guid>(); 
    OpenNodes.Add(Session.SessionID, list); 
} 

//User clicked on a node 
Guid id = new Guid(e.Node.Value); 
tmpList = OpenNodes[Session.SessionID]; 
tmpList.Add(id); 
OpenNodes[Session.SessionID] = tmpList; 

에 한 아래와 같은 객체를 사용하고 그것을 agood는 practive인가 또는 동일한을 달성하기 위해 유사한 '더 좋은'방법은 무엇입니까?

+0

잠금이 누락되었습니다. ... 'lock (/ ** /)'또는'ReaderWriterLockSlim'-usage –

답변

7

정적 필드로 Session을 대체하지 마십시오. Session은 훨씬 더 유연하며 오류가 발생하기 쉽지 않습니다. 웹 팜에서 쉽게 작동하도록 할 수 있습니다 (정적 필드를 사용하여이를 수행 할 수는 없습니다). 일부 Application 변수를 정적 필드로 대체하는 것이 좋습니다. 정적 필드는 스레드 안전 메커니즘을 상자 밖으로 제공하지 않으므로 수동으로 적절히 제어 (잠금)해야한다는 사실을 아는 것이 중요합니다.

4

웹 서버는 멀티 스레드입니다. 공유/정적 객체에 대한 액세스를 동기화해야합니다.

3

이 경우 세션 상태 만 사용할 수 있습니다. 여기에 제안한 패턴을 사용하는 전문가는 없습니다.

정적 필드를 실제로 모방해야하는 경우 Application 상태를 사용해야합니다.