使用字典时出现内存不足异常

时间:2018-08-08 08:30:29

标签: c#

我需要使用NET Framework 2.0收集字典。我不是这门语言的专家。词典必须包含有关每天的特殊信息。 我简化了示例,并在没有IDE的情况下创建了该示例,如果不准确,请谅解。

Dictionary<string, int> copy = new Dictionary<string,int>();
Dictionary<string, Dictionary<string, int>> dayResult = new Dictionary<string, Dictionary<string, int>>();

//initialization
for(int i = 0; i < 10 ; i++){
    copy.Add(i.ToString(),0);
}
for(int day = 0; day < 3000; day++) {
    dayResult.Add(day.ToString(), copy);
}

for(int k = 0; k < 1000; k++){
    for(int day = 0; day < 3000; day++) {
        copy = new Dictionary<string, int>(dayResult[day.ToString()]);
        copy[randomValue.ToString()]++;
        dayResult[day.ToString()] = copy; 
    }
}   

我遇到内存不足的异常。但是,如果我更改了行

copy = new Dictionary(dayResult[day.ToString()]); 

copy = dayResult[day.ToString()];

我每天都会得到相同的结果,但是我的randomValue每次从0更改为9,这就是不可能的原因。

仔细阅读

我正在尝试每天收集数据。此数据有很多键,并且键具有不同的频率。我需要了解在特定日期哪些键集与特定频率相遇。我在做什么错了?

PS

我在特殊的IDE中工作,无法控制“ for”周期:

for(int k = 0; k < 1000; k++)
    for(int day = 0; day < 3000; day++) 

这就是为什么我只能保存和初始化数据的原因。

1 个答案:

答案 0 :(得分:0)

您可以使用linq来获取嵌套字典:

            List<int> firstList = (new string('\0', 100)).Select((x,i) => i).ToList();
            List<int> secondList = (new string('\0', 1000)).Select((x, i) => i).ToList();
            Random rand = new Random();
            Dictionary<string, Dictionary<string, int>> dayResult = secondList
                .GroupBy(x => x.ToString(), y => firstList
                    .GroupBy(a => a.ToString(), b => rand.Next())
                    .ToDictionary(a => a.Key, b => b.FirstOrDefault()))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());