1

我有处理文本的工具。工具有 6 个备忘录(memoEdit - devexpress)。但是当用户输入大文本(每个备忘录 50-100k 行)时,异常抛出错误内存不足

为避免此异常,我允许用户选择文件进行处理。工具将读取文件的每一行并处理每一行,然后写入文件结果。

但我的问题是如何同时读取 6 个输入文件的第 1 行?还是第 2 行...第 n 行?

请帮忙。

更新

  • 用户输入 html 链接 >> 处理新的 html 链接
  • 用户输入 Title >> 处理新的 Title
  • 用户输入描述 >> 以处理新的描述。
  • 用户输入图片链接等链接和模板。

我的工作是处理并将所有用户输入混合到一个文件中。

更新

工具运行良好,但在导出或写入结果文件时,抛出异常。

这就是为什么我认为我需要读取输入文件并逐行写入结果。但问题是如何同时读取 4-6 个文件的同一行。例如:读取 6 个文件的第 1 行?

4

3 回答 3

1

我有一个类似的问题,之前我可以通过将工作分成批次来解决:

  1. 读取输入 1 到 6。
  2. 合并数据
  3. 向磁盘上的文件写入几行。
  4. 在磁盘上的文件中再添加几行。
  5. 重复步骤 4 和步骤 5,直到步骤 2 中的所有数据都写入磁盘上的文件。

完毕!

于 2013-08-21T10:47:16.517 回答
1

我不确定我是否得到您的问题,因为这听起来微不足道,但我们将通过查看是否有答案以及如果不是 - 为什么来解决困扰您的问题。

所以,这是我的建议。它假设您有相同行数的文件(假设您说您合并了文件的内容)。当然,您的文件可能应该分开单独处理,但您会明白的。

List<System.IO.StreamReader> files = new List<System.IO.StreamReader>
                     {
                            new System.IO.StreamReader("c:\\file1.txt"),
                            new System.IO.StreamReader("c:\\file2.txt"),
                            new System.IO.StreamReader("c:\\file3.txt")
                     };
int lineCount = 0;
bool hasMore = true;
while(hasMore)
{
   foreach(var file in files)
   {
       string fileLine = file.ReadLine();
       hasMore = fileLine != null;
       //add your processing here...
   }

   lineCount++;

}

file.Close();
于 2013-08-21T10:48:16.237 回答
1

问题是您的内存不足。就是这么简单。您的数据量超过了您的 RAM。文件有多大?将它们加起来,然后将其与您 PC 上的内存进行比较。

请记住,c# 字符串是 Unicode - 每个字符 16 位。您的文本文件可能是每个字符 8 位,但在内存中始终是 16 位。

于 2013-08-21T09:28:15.577 回答