2011-02-07 4 views
4

Хорошо, это был такой длинный день, что я просто буду искать информацию от экспертов.Thread saftey на странице ASPX Codebehind

Допустим, я делаю это:

public class ZipFiles : Page 
{ 
    Hashtable hs; 

, чтобы начать с, то есть у меня есть переменная-член в этом классе.

Тогда у меня есть строки, я называю в OnLoad, как:

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

в порядке, и, наконец, у меня есть метод WriteDelegate от DotNetZip, который делает это:

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

Вы можете видеть, что в OnLoad Я помещаю все объекты mf в хэш-таблицу с именем FileName в качестве своего ключа (там никогда не будет двух одинаковых имен файлов), а затем в WriteDelegate я вывожу их, чтобы получить массив Byte [] за объектом MF.

Является ли это reciepe для катастрофы? Будут ли смешиваться хеш-таблицы от разных пользователей на нашем сайте, а связи вселенной расходятся?

Спасибо за помощь заранее! Это 5:09 вечера, и я закончил день. Жена делает бискикские куриные пальцы сегодня вечером на ужин. Они великолепны, попросите reciepe, если хотите. Плюс у нее есть наши 2 мальчика (6 и 4) дома, которые только что вернулись в школу впервые с ПОСЛЕДНЕГО понедельника. Это будет 2 уставших мальчика и 1 усталая мама, когда я буду кататься после 5:40 сегодня!

+1

В дополнение к нижеследующим ответам .... Я возьму этот рецепт, пожалуйста. :) – asawyer

ответ

1

Каждая загрузка страницы посещений приведет к воссозданию хеш-таблицы. Это не рецепт катастрофы с точки зрения безопасности потоков, но это рецепт катастрофы с точки зрения производительности. Вероятно, вы хотите создать потокобезопасный синглтон для управления этой хэш-таблицей.

+0

Можно ли дать более подробную информацию о том, как снять это? Или, может быть, укажите мне ссылку? Я все очень новичок в этом, и это немного крутит в моей голове. –

+0

@Paul. ознакомьтесь с этой ссылкой http://www.yoda.arachsys.com/csharp/singleton.html – Vadim

+0

Hrmm теперь эта страница получает список docID (s) как ввод формы. Если бы я сделал Синглтон, разве эти таблицы никогда не застыли в таблице с течением времени, если бы я не очистил те, с которыми я закончил, после того как я закончил? –

4

Вы не должны сталкиваться с проблемами с потоком, так как переменная HashTable не является статической. Каждый запрос страницы генерирует новый экземпляр вашего класса ZipFiles со своими собственными данными.

Смежные вопросы