试图避免两次读取文件

时间:2012-03-19 15:36:22

标签: c#

我正在解析一个最大可达35MB的文本文件。

我目前有这段代码:

const string show_BLOCK_DELIMITER = "show ";
const string Show_BLOCK_DELIMITER = "Show ";
const string Begin_SHOW_HW_DELIMITER = @"show hardware internal errors";

以及控制捕获内容的逻辑:

 if ((line == null) || (trimmed.StartsWith(show_BLOCK_DELIMITER))
  ||   (trimmed.StartsWith(Show_BLOCK_DELIMITER))  
|| (trimmed.Contains(Begin_SHOW_HW_DELIMITER)))
  {
     //stuff happens here
   }

我捕获的方式是读取文件,当我点击以“show”或“Show”开头的行时,我会检查它是否是我要捕获的内容。如果是这样,我开始捕捉,直到下一行以'show'或'Show'开头。新代码应该捕获常量'Begin_SHOW_HW_DELIMTER'之间的东西,除了这是输入的样本。我应该得到的是2个块或字符串,每个块以“Module-N#”开头,​​因为那些带有fc-mac的行以'show'开头但不在我要捕获代码的列表中认为这是一个新的块,他们不会被捕获。在这一点上,我想知道一个单独的方法来处理这个新的部分,只是读取文件两次。 if / else语句已经非常复杂了。

module-1#显示硬件内部错误

show hardware internal fc-mac port 1 interrupt-counts

show hardware internal fc-mac port 2 interrupt-counts

module-2#显示硬件内部错误

show hardware internal fc-mac port 1 interrupt-counts

show hardware internal fc-mac port 2 interrupt-counts

1 个答案:

答案 0 :(得分:0)

如果您遇到性能问题,您的条件语句比磁盘读取便宜得多,因此读取文件两次最终会降低性能。

现在,复杂的条件语句会降低可维护性,并引入错误的可能性。

你可以做什么,是你可以将文件读入内存(只需将所有行加载到数组中。),读取文件两次会花费更少的时间,但你会使用更多的内存。