The Daily WTF 中文 关注 CodeSOD:副本的副本 杰西卡正在维护一个使用了过时 API 的遗留 Windows 窗体应用程序。她的任务是调查一个性能不佳的报表。该代码库被描述为“意大利面条式代码”,存在许多低效之处。杰西卡发现了一个名为 GetReportDiscounts 的方法,该方法执行 SQL 查询,但令人费解的是,它在 C# 中进行了 SQL 中已经存在的汇总操作。该方法还忽略了自身的日期参数,并使用一个“魔法数字”进行过滤。另一个方法 GetReportTotals 与其几乎相同,但使用了不同的“魔法数字”。这两个方法都继承自一个更早的方法 GetCancelledInvoices,该方法正确地使用了日期参数。然而,GetCancelledInvoices 也在 C# 中进行了过滤,而不是在数据库查询中进行。杰西卡发现实际有问题的报表是这些方法的变体,它依赖于客户端处理来进行数据操作。通过将该报表重构为带有适当索引的 SQL 存储过程,性能得到了显著提升。文章强调了代码复制粘贴以及在应用程序层低效地执行数据库操作的常见问题。 CodeSOD: Copy of a Copy of a thedailywtf.com The Daily WTF 中文 RSS thenote.app
GetReportDiscounts的方法,该方法执行 SQL 查询,但令人费解的是,它在 C# 中进行了 SQL 中已经存在的汇总操作。该方法还忽略了自身的日期参数,并使用一个“魔法数字”进行过滤。另一个方法GetReportTotals与其几乎相同,但使用了不同的“魔法数字”。这两个方法都继承自一个更早的方法GetCancelledInvoices,该方法正确地使用了日期参数。然而,GetCancelledInvoices也在 C# 中进行了过滤,而不是在数据库查询中进行。杰西卡发现实际有问题的报表是这些方法的变体,它依赖于客户端处理来进行数据操作。通过将该报表重构为带有适当索引的 SQL 存储过程,性能得到了显著提升。文章强调了代码复制粘贴以及在应用程序层低效地执行数据库操作的常见问题。