C# 试图避免读取文件两次
我正在解析一个最大为35MB的文本文件 我目前有以下代码: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(
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中添加更多的检查效率低。我会在现有捕获之前解析文件一次,然后再次解析它以获得我想要的新捕获。新的输入中断了现有的逻辑,而没有进行一些额外的特殊情况检查。这不是性能问题,只是现有逻辑的问题。两次读取文件并不是非常高效的。复杂条件句也有自己的问题。使用数组可以读取整个文件,搜索开始/结束索引,然后将它们作为块捕获。这将意味着重新设计现有的逻辑,但我认为无论如何都必须这样做。