如何修复我的系统内存不足异常
本文关键字:内存不足 异常 系统 我的 何修复 | 更新日期: 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++;
}
}
}
}
}
}
}
但是,请注意。 您的代码将需要很长时间才能完成。 您只是不会得到内存不足错误。 不过,您的硬盘空间可能会用完:)