2011-02-07 19 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); 
     } 
    } 

をあなたは読み込み時にそれを見ることができます私はすべてのmfオブジェクトをハッシュテーブルに入れ、FileNameをキーとして(同じファイル名の2つは存在しない)、WriteDelegateでMFオブジェクトの背後にByte []配列を得るためにそれらをポップしています。

これは災害のためのレシピですか?私たちのサイトの異なるユーザーからのハッシュテーブルが混在し、宇宙の絆が分かれることはありますか?

事前にお世話になりました!それは午後5時9分です。私はその日に終わります。妻は今夜、ビスキックの鶏の指を夕食にしています。彼らは素晴らしいです、もしあなたがそれを望むなら、レシピをお願いします。さらに、彼女は家に2人の男の子(6と4)を持っていて、ちょうど最後の月曜日から初めて学校に戻った。私は今夜​​5:40の後にロールインすると、2人の疲れた少年と1人の疲れたママになるでしょう!

+1

以下の回答に加えて....私はそのレシピをどうぞ。 :) – asawyer

答えて

1

各訪問ページが読み込まれると、ハッシュテーブルが再作成されます。これはスレッドの安全性の面で災害のレシピではありませんが、パフォーマンス面では災害のレシピです。このハッシュテーブルを管理するには、おそらくスレッドセーフなシングルトンを作成する必要があります。

+0

それを取り除く方法の詳細をいくつか教えてもらえますか?または、リンク先を教えてください。私はこれですべて非常に新しいです、そして、それは私の頭の中でちょっと回転しています。 –

+0

@Paul。このリンクを参照してください。http://www.yoda.arachsys.com/csharp/singleton.html – Vadim

+0

Hrmmこのページでは、docIDのリストをフォーム送信入力として取得します。私がシングルトンを作ったのであれば、私が終わった後にやってしまったものをクリアしない限り、テーブルのエントリは時間の経過とともにテーブルに蓄積されませんか? –

4

HashTable変数が静的ではないため、スレッドに問題が発生することはありません。各ページ要求は、独自のデータを持つZipFilesクラスの新しいインスタンスを生成します。

関連する問題