如何修复我的系统内存不足异常

本文关键字:内存不足 异常 系统 我的 何修复 | 更新日期: 2023-09-27 17:55:25

我正在尝试创建一个程序,该程序将给我 1 到 55 之间的每个数字,但连续 6 次。

那是;

1-17-25-45-49-51

55-54-53-52-51-50

请注意,两个数字不能连续重复。

我已经在较小的规模上测试了这个程序,到目前为止它按预期进行了测试。但是,如果我全尺寸运行它,如下面发布的代码所示,它会遇到"内存不足异常"。我的猜测是,这是因为内存在连续构建 ArrayList 和文件时必须容纳如此大的数字。

我该如何解决这个问题?

class MainClass
{
    public static void Main (string[] args)
    {
        ArrayList newWords= new ArrayList();
        System.Console.WriteLine ("Please enter word to prepend ");
        int wordCount = 0;
        string numbers;
        string word = Console.ReadLine ();
        string word2 = word;
        string separator = "-";
        System.Console.WriteLine ("Please enter location of where you would like the new text file to be saved: ");
        string newFileDestination = Console.ReadLine ();
        TextWriter writeToNewFile = new StreamWriter (newFileDestination);
        for(int a = 1; a < 56; a++){
            for(int b = 1; b < 56; b++){
                for(int c = 1;  c < 56; c++){
                    for(int d = 1; d < 56; d++){
                        for(int e = 1;  e < 56; e++){
                            for(int f = 1; f < 56; f++){
                                if(a != b && a != c && a != c && a != e && a != f && b != c && b != d && b != e && b != f && c != d && c != e && c != f && d != e && d != f && e != f){
                                    word = word2;
                                    numbers = string.Concat(a, separator,  b, separator, c, separator, d, separator, e, separator, f);
                                    word += numbers;
                                    newWords.Add (word);
                                }
                            }
                        }
                    }
                }
            }
        }
        foreach(string line in newWords){
            writeToNewFile.WriteLine(line);
            Console.WriteLine (line);
            wordCount++;
        }
        writeToNewFile.Close ();
        Console.WriteLine (wordCount);
        Console.WriteLine ("Press any key to exit.");
        System.Console.ReadKey ();
    }
}
}

如何修复我的系统内存不足异常

在不尝试修复其余代码的情况下,您需要遵循的基本原则是在获得数字时写出数字,而不是将它们累积在列表中。 您可以完全摆脱ArrayList以及随附的foreach循环。

相关部分如下所示:

    TextWriter writeToNewFile = new StreamWriter (newFileDestination);
    for(int a = 1; a < 56; a++){
        for(int b = 1; b < 56; b++){
            for(int c = 1;  c < 56; c++){
                for(int d = 1; d < 56; d++){
                    for(int e = 1;  e < 56; e++){
                        for(int f = 1; f < 56; f++){
                            if(a != b && a != c && a != c && a != e && a != f && b != c && b != d && b != e && b != f && c != d && c != e && c != f && d != e && d != f && e != f){
                                word = word2;
                                numbers = string.Concat(a, separator,  b, separator, c, separator, d, separator, e, separator, f);
                                word += numbers;
                                writeToNewFile.WriteLine(word);
                                Console.WriteLine (word);
                                wordCount++;
                            }
                        }
                    }
                }
            }
        }
    }

但是,请注意。 您的代码将需要很长时间才能完成。 您只是不会得到内存不足错误。 不过,您的硬盘空间可能会用完:)