我现在用哈希表存储4000万条数据,key为string,value是一个arraylist.在运行到约24000万条的时候,基本就存不进去,5,6个小时也存不了100万条。
这是内存不够吗,还是哈希表的限制?
Hashtable SogouHashA = new Hashtable();
public void Setup()
//读入词条并添加哈希表内容
{
string address; 
Console.WriteLine("Enter the path of the Dictionary");
address = Console.ReadLine();
Console.WriteLine("Loading the Dictionary...");   
StreamReader Dic = new StreamReader((Stream)File.OpenRead(address),System.Text.Encoding.Default);
string entry;
DateTime setuptime1 =  System.DateTime.Now;
int k = 0;
int t = 0;
while((entry = Dic1.ReadLine())!=null)

k++;
int i = entry.IndexOf( '-');
string mykey = entry.Substring(0,i);
string myvalue = entry.Substring(i+1);
if (SogouHashA.ContainsKey(mykey))
{
ArrayList A1 = (ArrayList)SogouHashA[mykey];
A1.Add(myvalue);
}
else
{
ArrayList A1 = new ArrayList();
A1.Add(myvalue);
SogouHashA.Add( mykey, A1); }
                                string[] svalue= myvalue.Split('\t');
string key2 = svalue[0];
string entryfrequency = svalue[1];
string value2 = mykey+'\t'+entryfrequency;
if (SogouHashA.ContainsKey(key2))
{
ArrayList A1 = (ArrayList)SogouHashA[key2];
A1.Add(value2);
}
else
{
ArrayList A1 = new ArrayList();
A1.Add(value2);
SogouHashA.Add( key2, A1);
} if (k == 1000000)
{
Console.WriteLine("{0} reached",k*(t+1));
k = 0;
t++;
DateTime setuptime2 =  System.DateTime.Now;
Console.WriteLine("costs (hour:minite:second)  " + (setuptime2-setuptime1));
}
}



Dic.Close();
Console.WriteLine("New dictionary has been set up!");  
}
用记事本存这些数据,大约500M。我的电脑内存1G。
我试了一下,用哈希表value和key都是int型的时候到了大约2100万条的时候会有system.outofmemory.exception。这是什么原因?
请高手指点!