ASPX Code Behind页面上的线程安全

时间:2011-02-07 22:11:57

标签: asp.net thread-safety c#-2.0

好的,这是漫长的一天,我只是想寻找专家的意见。

让我说我这样做:

   public class ZipFiles : Page
{
    Hashtable hs;

首先,这意味着我在这个类中有一个成员变量。

然后我在OnLoad中调用的行如下:

                  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中我将所有mf对象放入哈希表中,并将FileName作为其键(不会有2个相同的文件名)然后在WriteDelegate中我将它们弹出以获取MF对象后面的字节[]数组。

这是灾难的重播吗?来自我们网站上不同用户的哈希表是否会混合在一起,宇宙的纽带会分开吗?

提前感谢您的帮助!现在是下午5点09分,我结束了这一天。妻子今晚正在制作bisquick鸡手指。他们很棒,如果你愿意的话,可以要求接收。另外,她在家里有两个男孩(6和4),这是自上周一以来第一次回到学校。今晚5点40分,当我滚入时,会有2个疲惫的男孩和1个疲惫的妈妈!

2 个答案:

答案 0 :(得分:4)

由于HashTable变量不是静态的,因此不应遇到任何线程问题。每个页面请求都会生成一个具有自己数据的ZipFiles类的新实例。

答案 1 :(得分:1)

每次访问页面加载都会导致重新创建哈希表。就线程安全而言,这不是灾难的处方,但它在性能方面是灾难的一个方法。您可能想要创建一个线程安全的单例来管理此哈希表。