2011-02-07 6 views
4

좋아요, 오랫동안 전문가의 의견을 기다리고 있습니다.ASPX Codebehind 페이지의 스레드 안전

의 내가이 일을하고 있다고 가정 해 봅시다 :

public class ZipFiles : Page 
{ 
    Hashtable hs; 

내가이 클래스의 멤버 변수가 의미와 함께 시작합니다.

    ManagedFile mf = new ManagedFile(site); 
       mf.ID = docID; 
       mf.Load(); 
       hs.Add(Path.GetFileName(mf.URL), mf); 

좋아 그리고 마지막으로 나는이 수행 DotNetZip에서 WriteDelegate 방법이 있습니다 :

 private void WriteEntry(String filename, Stream output) 
    { 
     ManagedFile value = (ManagedFile)hs[filename]; 
     using (MemoryStream ms = new MemoryStream(value.GetBinary())) 
     { 
      ms.WriteTo(output); 
     } 
    } 

당신은의 OnLoad에서 것을 볼 수 있습니다

그럼 내가 같이의 OnLoad에 전화 라인을 가지고 나는 모든 mf 객체를 해시 테이블에 넣어 FileName을 키로 사용하고 (동일한 파일 이름이 2 개는 안됨) WriteDelegate에서 MF 객체 뒤에 Byte [] 배열을 가져 오도록 터뜨리고 있습니다.

재해로 인한 재발견입니까? 우리 사이트의 여러 사용자가 만든 해시 테이블이 서로 섞여서 우주의 채권이 분리됩니까?

미리 도움을 주셔서 감사합니다! 오후 5시 9 분이고 오늘은 끝났어. 부인은 오늘 밤 저녁에 bisquick 닭고기 손가락을 만들고 있습니다. 그들은 위대하다, 당신이 원하면 reciepe를 요청하십시오. 게다가 그녀는 지난 월요일 이후 처음으로 학교에 다시 돌아간 2 명의 소년 (6, 4 세)을 집에 데리고 있습니다. 오늘 밤 5시 40 분 이후에 피곤한 남자 2 명과 피곤한 엄마가 될 것입니다!

+1

아래 답변에 추가 .... 제발 그 요리법을 가져 가겠습니다. :) – asawyer

답변

1

각 방문 페이지가로드되면 해시 테이블이 다시 만들어집니다. 이것은 스레드 안전 측면에서 재앙을위한 방법은 아니지만 성능면에서 재앙을위한 방법입니다. 이 해시 테이블을 관리하기 위해 스레드 세이프 싱글 톤을 생성하려고합니다.

+0

그걸 풀어내는 방법에 대해 더 자세히 설명해 주실 수 있습니까? 아니면 링크를 가르쳐 주시겠습니까? 나는 이것에 아주 새로운 모두이고 그것은 나의 머리에서 다소 회전시키고있다. –

+0

@Paul. 이 링크를 확인하십시오 http://www.yoda.arachsys.com/csharp/singleton.html – Vadim

+0

Hrmm이 페이지는 docID (s)를 양식 제출 입력으로 가져옵니다. 내가 싱글 톤을 만들었다면, 내가 완료된 후에 내가 끝내고 난 테이블을 지우지 않는 한 테이블 엔트리가 테이블에 쌓이지 않을까? –

4

HashTable 변수가 정적이 아니므로 스레딩 문제가 발생하지 않아야합니다. 각 페이지 요청은 자체 데이터가있는 ZipFiles 클래스의 새 인스턴스를 생성합니다.