【问题标题】:Objecting vs Anonymous - Running over text反对与匿名 - 在文本上运行
【发布时间】:2017-09-28 13:42:26
【问题描述】:

我有两个大文本文件要比较,每个文件包含大约 100,000 行,每行代表数据库中的一个实体,它是数据。

使用 c#。 最初比较时,我只是逐行吐出文件,然后将每一行吐出到字典中,然后按每个文件内容的键比较值。 这工作正常,但在我看来有点尴尬,因为每一行都是“愚蠢的”,而且我对每个分割所代表的内容、别名等的控制较少。然后我决定将每一行表示为一个对象,并带有命名、属性, ETC,。 从那时起,它的代码更简洁,更容易控制,但在性能方面,它需要大约 8 分钟,而之前的方法不到一分钟。

我想知道,如果从每一行创建对象是正确的方式(编程明智),或者在这种情况下,“愚蠢”的分割、循环和比较文本将是“更干净”的方式?

更新目的: 我将代码更改为反对行,因为行中的每个拆分都有自己的“设置”,例如,一行的数量看起来像 00100,然后我想将其解析为 int,然后再进行比较,一些拆分是“忽略”,每个拆分也有一个名称(基本金额,公司等),所以如果有差异,我想报告拆分的名称.. 我的疑问是,如果将在 20 秒内运行的代码更改为在 10 分钟内运行但让我的生活更轻松的代码,是正确的吗?

【问题讨论】:

  • 你想要完成什么?寻找重复的行?具有相同键但值不同的行?要从一个文件添加到另一个文件的新记录?
  • 这完全取决于你之后对这些行所做的事情。如果您只是扫描文件以查找错误,则继续逐行读取并处理字符串。如果你想对数据做一些实际的事情,你可能应该创建一个类的一些实例。
  • 我正在尝试获取每一行,找到关键,并将整行与另一个文件的引用行进行比较。每行代表一个“实体”,我正在尝试比较每个文件中匹配的实体内容。
  • @JoelCoehoorn,具有相同键但值不同的行。但要检查不同的值,我必须拆分行本身。每个拆分可能代表需要的不同“数据”压缩时区别对待
  • 第一个文件中的行是否总是在第二个文件中匹配?文件是否以任何方式排序?

标签: c# string text split compare


【解决方案1】:

要遵循的一个简单原则是,您必须构建您需要的东西,而不是看起来漂亮的东西。

如果您需要操作正在读取的数据,那么使用数据填充对象对我来说很有意义。但是,如果您只需要比较条目,则没有理由让条目比这更“智能”。

不过,我建议如果您认为代码丑陋或感觉笨拙,请尝试寻找替代方案并选择您认为最好的代码。尤其是在比较时,您可能需要更深入地研究 linq 或 regex。

【讨论】:

  • 问题是,我将代码更改为反对行,因为行中的每个拆分都有自己的“设置”,例如,一行的数量看起来像 00100,那么我想要将其解析为 int 然后进行比较,有些拆分是“忽略”的,每个拆分也有一个名称(基本金额、公司等),所以如果有差异,我想报告拆分的名称。
  • 基于此,我会说转换为对象是有帮助的。也许你可以通过只转换那些有差异的来提高性能。
【解决方案2】:

在我看来,可维护性和可读性更重要。一旦实现这一点,您就可以随时提高性能。

我见过许多根本不需要的“早期”性能优化,只会让一切变得更加复杂。

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2016-04-11
    相关资源
    最近更新 更多