C# 试图避免读取文件两次

C# 试图避免读取文件两次,c#,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(

我正在解析一个最大为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\u SHOW\u HW\u DELIMTER”之间的内容,但这里是输入的示例。我应该得到的是2个块或字符串,每个块都以“Module-N#”开头,因为其中带有fc mac的行以“show”开头,但不在我想要捕获的内容列表中。代码认为这是一个新块,因此无法捕获。在这一点上,我想知道一个单独的方法来处理这个新的部分,只是读取文件两次。if/else语句已经相当复杂了

模块1#显示硬件内部错误

显示硬件内部fc mac端口1中断计数

显示硬件内部fc mac端口2中断计数

模块2#显示硬件内部错误

显示硬件内部fc mac端口1中断计数


show hardware internal fc mac port 2 interrupt counts

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

现在,复杂的条件语句确实降低了可维护性,并引入了bug的可能性


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

读取两次文件的部分在哪里?@minitech抱歉,我不清楚。还没有。我试图避免这样做,但不知道这是否比在我现有的已经复杂的if/else中添加更多的检查效率低。我会在现有捕获之前解析文件一次,然后再次解析它以获得我想要的新捕获。新的输入中断了现有的逻辑,而没有进行一些额外的特殊情况检查。这不是性能问题,只是现有逻辑的问题。两次读取文件并不是非常高效的。复杂条件句也有自己的问题。使用数组可以读取整个文件,搜索开始/结束索引,然后将它们作为块捕获。这将意味着重新设计现有的逻辑,但我认为无论如何都必须这样做。