C# 反对与匿名-在文本上运行
我有两个大的文本文件要比较,每个文件包含大约100000行,每行代表数据库中的一个实体,以及它的数据 使用c#。 为了进行初步比较,我只需将文件逐行输出,然后将每行输出到字典中,然后通过键比较每个文件内容中的值。 这很好,但在我看来有点尴尬,因为每一行都是“愚蠢的”,我对每一次分割所表示的内容、别名等控制较少。然后我决定将每一行表示为一个对象,包括命名、属性等,。 从那时起,它的代码更干净,更容易控制,但从性能上看,它需要大约8分钟,而与前一种方法相比不到一分钟 我想知道,从每行开始创建对象是否是正确的方法(编程方面),或者在这种情况下,“愚蠢”的拆分、循环和比较文本将是“更干净”的方法 更新目的: 我将代码改为反对行,因为行中的每个拆分都有自己的“设置”,例如,一行的金额看起来像00100,然后我想将其解析为int,然后进行比较,一些拆分是“忽略”,每个拆分也有一个名称(基本金额、公司等),因此,如果有差异,我想报告拆分的名称。。C# 反对与匿名-在文本上运行,c#,string,text,split,compare,C#,String,Text,Split,Compare,我有两个大的文本文件要比较,每个文件包含大约100000行,每行代表数据库中的一个实体,以及它的数据 使用c#。 为了进行初步比较,我只需将文件逐行输出,然后将每行输出到字典中,然后通过键比较每个文件内容中的值。 这很好,但在我看来有点尴尬,因为每一行都是“愚蠢的”,我对每一次分割所表示的内容、别名等控制较少。然后我决定将每一行表示为一个对象,包括命名、属性等,。 从那时起,它的代码更干净,更容易控制,但从性能上看,它需要大约8分钟,而与前一种方法相比不到一分钟 我想知道,从每行开始创建对象是否
我的疑问是,如果将运行时间大约为20秒的代码改为运行时间为10分钟的代码,但这会让我的生活更轻松,这是正确的吗 一个简单的原则是,你必须构建你需要的,而不是看起来漂亮的 如果您需要操作正在读取的数据,那么使用这些数据填充对象对我来说是有意义的。但是如果你只需要比较条目,没有理由让条目比这更“聪明”
然而,我建议,如果您认为代码很难看或者感觉笨拙,那么您可以尝试寻找替代方案,并选择您认为最好的。特别是对于比较,您可能需要更深入地研究linq或regex。在我看来,可维护性和可读性更为重要。一旦你做到了这一点,你就可以随时提高性能
我看到了许多根本不需要的“早期”性能优化,它们只会使一切变得更加复杂。您想实现什么?寻找重复的线条?具有相同键但值不同的行?要从一个文件添加到另一个文件中的新记录?这完全取决于您之后对这些行所做的操作。如果您只是扫描文件以查找错误,而这些错误停留在逐行读取文件并处理字符串上。如果你真的想对数据做点什么,你可能应该创建一些类的实例。我试图获取每一行,找到键,并将整行与另一个文件的引用行进行比较。每行代表一个“实体”,我试图比较每个文件中匹配的实体内容。@JoelCoehoorn,具有相同键但值不同的行。。但要检查不同的值,我必须拆分行本身。。每个分割可能代表不同的“数据”,需要在压缩时进行不同的处理。第一个文件中的行在第二个文件中是否总是匹配?文件是否以任何方式排序?问题是,我将代码更改为反对行,因为行中的每个拆分都有自己的“设置”。例如,一行的数量看起来像00100,然后我想将其解析为int,然后进行比较,一些拆分是“忽略”,每个拆分也有一个名称(基本金额、公司等),因此如果存在差异,我想报告拆分的名称。基于此,我想说转换为对象是有帮助的。也许您可以通过仅转换存在差异的对象来提高性能。