C#仅从第二次读取文本OutOfMemoryException

所以我有一个大Text文件,我想读取并取特定的块(大约30行)。此块在我的文本文件中存在很多次,我想使用最后一个。


所以这就是我尝试的:


while (true)

            {

                Thread.Sleep(30000);

                string text = File.ReadAllText(@"c:\file.txt");

                string table = string.Join("", text.Substring(text.LastIndexOf("My Statistics:"))

                    .Split(new[] { '\n' })

                    .Take(24)

                    .Select(i => i.ToString())

                    .ToArray());


                File.WriteAllText(@"last.txt", table);

            }

该Text文件每20秒更改一次,因此我使用while循环进行此操作,我需要在新Text文件上写入最后一个块。


这里的问题是,在第一次(可以正常工作)之后,我得到了一个错误: OutOfMemoryException


编辑


我尝试另一种方法并逐行读取,但结果是相同的。


神不在的星期二
浏览 300回答 1
1回答

慕雪6442864

使用StreamWriter将生成的每一行直接写入文本文件。这样可以避免先将整个长文件存储在内存中。using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\Somewhere\\whatever.txt"))&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Generate all the single lines and write them directly into the file&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i<=10000;i++)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sw.WriteLine("This is is : " + i.ToString());&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP