嵌套循环中的内存不足错误C#

问题描述:

我看了这个,我几乎得到它,但我有这一个剩余的运行时错误。
我的代码如下:嵌套循环中的内存不足错误C#

while ((line = reader.ReadLine()) != null) 
{ 
    while (reader.Peek() != '\r') 
    { 
     datalinestream.Add(GetWord(reader)); 
    } 
    LuceneDB.AddUpdateLuceneIndex(new MATS_Doc(datalinestream)); 
    datalinestream.Clear(); 
} 

的代码导入数据,但循环不会打破,将碰撞出由于以下

“未处理的类型系统的”例外。 OutOfMemoryException异常”在mscorlib.dll”

什么是外适当的休息条件,同时循环,以确保我读了整个文件,并在年底突破发生 。由于我需要前进到下一行,因此我需要跳过电子表格中的第一行,因此我很困惑。任何帮助非常感谢。

* UPDATE *

我清楚琴弦,因为我创造了Lucene索引文档的列表,它只有在这约14个领域,我不想要列表太大。导致datalinestream来获得海量 -

我对朗朗上口

private string GetWord(TextReader inputdata) 
     { 
      String word = ""; 

      while (inputdata.Peek() >= 0) 
      { 
       word += (char)inputdata.Read(); 
       if ((word.Contains(";"))) break; 
      } 

     return word; 
    } 
+5

是什么'GetWord'吗?你的文件有多大? – 2013-03-13 11:30:26

+0

我的文件非常小15 kb。它只有50行分号分隔的东西。代码运行,它挂起来,就像它以某种方式卡住了。 – TheCodeNovice 2013-03-13 13:42:26

我猜GetWord没有进展的读者代码。

或者你的文件真的很大。

出于兴趣 - 你为什么要扔掉line? - 当然包含你想要在内部循环中读取的所有文本?

更新

必须有显然是一个逻辑洞某处在你的代码,我的猜测是它或者添加-10字符到您的列表,或在GetWord内部串(顺便说一下,用+=以这种方式对于性能和内存使用而言是可怕的)。也可能是您的线路终端不是\r,而是“裸”\n

这就是说,你可以通过做这样的解决所有的问题:

string line = reader.ReadLine(); 
string wordTemp; 
while(line != null) 
{ 
    string[] words = 
    line.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
    foreach(var word in words) 
    { 
    wordTemp = word.Trim(); //get rid of any whitespace 
    if(wordTemp.Length != 0) 
     datalinestream.Add(wordTemp); 
    } 
    LuceneDB.AddUpdateLuceneIndex(new MATS_Doc(datalinestream)); 
    datalinestream.Clear(); 
    line = reader.ReadLine(); 
} 

正如我说 - 不要扔掉该行你刚才读 - 使用它,利用它去掉的事实新线也是。然后,只需使用string.Split即可破解每个单词,在此过程中对它们进行修剪以消除它们可能具有的任何拖尾/前导空格。

+0

是的 - 但如果GetWord()不提前它,那么'!='\ r''检查将保持代码在内部循环中。 – 2013-03-13 11:35:59

+0

我明白你的意思了。没有什么能阻止内在的条件,而不是真的。 – Jodrell 2013-03-13 11:37:27

+0

我认为getword确实能正常工作,因为我确实将信息导入程序。休息不起作用。所以我必须重新启动程序才能在导入后启动。 – TheCodeNovice 2013-03-13 13:48:22

这可能会导致异常

 while (reader.Peek() != '\r') 
     { 
     datalinestream.Add(GetWord(reader)); 
     } 
+0

代码运行良好,它只是无法退出外while循环。我能够读取文件中的所有数据。当到达文件末尾时,我需要一种打破方式,并最终在45秒的挂起时间内发出运行时间错误。 – TheCodeNovice 2013-03-13 13:49:40