好的,这是漫长的一天,我只是想寻找专家的意见。
让我说我这样做:
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个疲惫的妈妈!
答案 0 :(得分:4)
由于HashTable
变量不是静态的,因此不应遇到任何线程问题。每个页面请求都会生成一个具有自己数据的ZipFiles
类的新实例。
答案 1 :(得分:1)
每次访问页面加载都会导致重新创建哈希表。就线程安全而言,这不是灾难的处方,但它在性能方面是灾难的一个方法。您可能想要创建一个线程安全的单例来管理此哈希表。