2011-03-12 118 views
2

早上好,这是避免不断创建对象的好习惯吗?

说我有一类ClassA,运营商+它总结了ClassA类型的两个对象,一个隐式转换从intClassA,那我想重载运营商++ ...假设的代码为+是相当长的,但是ClassA1的总和是一个非常特殊的情况,哪个选项更好?

  1. 执行++使用+和隐式转换已经定义。
  2. 重复部分代码,在添加1时简化了很多操作。

我的想法是,(2)是更好,因为它被隐式转换,如果++操作时,例如,在for周期,这是非常有用的保存新ClassA对象的创建。另外,速度是必须的。

非常感谢。

+3

你有什么反对称呼?你为什么编辑帖子将其删除?我没有问过你... – Miguel 2011-03-12 07:14:01

+0

不是我个人同意去除称呼,但我认为这是因为[this](http://meta.stackexchange.com/questions/2950/should- HI-感谢-和标语和 - 称呼被移除从 - 个)。 – Mehrdad 2011-03-12 07:22:27

+0

@Miguel:这里的政策通常不符合敬意。感觉就是它们只是多余的“噪音”,不会为帖子增加任何特殊的价值。他们通常被具有编辑权限的人员删除。如果这发生在你身上,你不应该把它当作侮辱。你可以阅读我们之前讨论过的讨论[这里是在Meta网站上](http://meta.stackexchange.com/questions/2950/should-hi-thanks-and-taglines-and-salutations-be-删除 - 从 - 个)。 – 2011-03-12 07:22:34

回答

3

无论哪种方式都是可以接受的。这听起来像第二种方式是你已经倾向于,所以试试看。实际上,请尝试两种方法并衡量增加一百万次的时间。标杆管理始终是做出这些决定的方式。

如果您之前没有做过任何基准测试,最简单的方法是创建一个System.Diagnostics.Stopwatch并在相关代码周围启动/停止它。然后,您可以将已用时间写入控制台。

4

您已回答了您自己的问题。如果速度是必须的,那么选择第二个速度更快的选项(对其进行基准测试以确保速度确实快得多)。

否则,请选择第一个选项,因为代码越少越好(并且保持DRY双倍)。较少的代码意味着更少的潜在错误,更少的维护,更少的写入以及更少的读取。如果代码在很大程度上与代码的另一部分重复,那么当您进行更改时,您必须保持两者同步 - 这会很麻烦,因为很容易忘记更新代码(并且即使您始终记得因为它们不完全相同,所以可以正确更新一个部分并错误地更新其他部分)。

在做出最终决定之前,确保速度真的是必须的 - 你不想要premature optimization

0

我的意见是,如果+1是一个非常简单的真正特例,那就执行特殊的++实现。如果你想保持你的代码小,你总是可以注释掉它并将它引用到+1。

否则,将很容易忘记这个特殊的优化6月。当你试图优化的时候在路上。

不成熟的优化是指你在之前优化这一事实,而不是当你有明确的理由时。然而,如何画线很困难;你需要决定如何简化++代码以便考虑将其放入。

相关问题