2011-03-12 125 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月。當你試圖優化的時候在路上。

不成熟的優化是指你在之前優化這一事實,而不是當你有明確的理由時。然而,如何畫線很困難;你需要決定如何簡化++代碼以便考慮將其放入。

相關問題