Asp.net 在ASPX代码隐藏页上执行线程安全

Asp.net 在ASPX代码隐藏页上执行线程安全,asp.net,thread-safety,c#-2.0,Asp.net,Thread Safety,C# 2.0,好吧,这是漫长的一天,我只想征求专家的意见 假设我正在这样做: public class ZipFiles : Page { Hashtable hs; 首先,这意味着我在这个类中有一个成员变量 然后我在OnLoad中调用了一些行,比如: ManagedFile mf = new ManagedFile(site); mf.ID = docID; mf.Load();

好吧,这是漫长的一天,我只想征求专家的意见

假设我正在这样做:

   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对象放入哈希表中,文件名作为它们的键(永远不会有两个相同的文件名),然后在writeLegate中,我将它们弹出,以获取mf对象后面的Byte[]数组

这是灾难的接受者吗?我们网站上不同用户的哈希表会混合在一起,宇宙的纽带会分离吗


提前谢谢你的帮助!现在是下午5点09分,我一天的工作都做完了。妻子今晚晚餐要做双脆鸡手指。他们很好,如果你喜欢的话,就去索要礼物吧。另外,她还有我们的两个男孩(6个和4个)在家,他们从上周一开始第一次回到学校。今晚5点40分后我进去的时候会是两个累了的男孩和一个累了的妈妈

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

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

除了下面的答案之外。。。。我要那个食谱有没有可能提供更多关于如何实现这一目标的细节?或者给我指一个链接?我对这一切都很陌生,我的脑子里有点发晕。Hrmm现在这个页面得到了一个文档ID列表作为表单提交输入。如果我创建了一个单例,那么这些表条目不是会随着时间的推移在表中累积吗?除非我在完成后清除了那些没有的条目吗?@Paul,我不知道你的页面在做什么,看起来你每次都在构建同一个哈希集。如果情况并非如此,并且每个页面访问都需要一个唯一的哈希集,那么您的实现将正常工作,并且不会导致任何线程问题。