2009-04-08 49 views
0

每個人都會在何時何地提高表現,因此在這裏沒有興趣,但我想知道在什麼時候性能增益值得晉升(從分支開發到後備箱,或者足夠放在一些進度報告或其他)。性能提升值多少/值得注意?

例如我的原則進行的拇指是一個10%的性能提升是顯着的,但有5%是沒有什麼特別的(當然加起來他們可能是值得雖然)

注:因爲沒有正確答案標記這個維基,但我知道有關於這個問題的意見作出有關性能

回答

2

爲O(n)爲O(log n)的算法改進大N近似的決定時是非常有用的是非常不錯。

+0

在斐波那契堆中,您有O(1)decreaseKey,與二進制堆(存儲在數組中)中的O(log n)相對。根據我的實驗,這在實踐中無關緊要:即使是相當大的n,ye olde二進制堆也超過fib堆。原因:fib堆有一個巨大的不變因素。 – 2009-04-08 11:21:34

2

我認爲這也取決於代碼的優雅/可讀性。如果一個特定的變化感覺像是一個更正確的解決方案,那麼消除代碼中的一些愚蠢行爲,那麼如果它也提高了性能,那就是「值得」的。但是,如果某個特定的更改純粹是爲了性能而設計的,並且會降低代碼的可讀性或可維護性,那麼最好是提高它的性價比,或許是50%。

4

我寧願使用絕對值。 1 ms中的20%不是你關心的事情。但是,一小時的2%是非常令人印象深刻的。

3

如果提高的性能爲系統增加了新的質量,值得一提。否則,沒有人通常關心。

例如,如果系統在加載了合理但超過常規數據量的情況下工作顯着緩慢,並且您已經修復了此問題,那麼值得一提,因爲那些加載大量數據的用戶將受益於改進。

2

這取決於。

如果這5%轉化爲節省的金錢,例如在一個大型的服務器農場中,值得注意的是。

如果它在最終用戶的計算機上速度提高5%,誰不會注意,那麼不會。

2

這取決於上下文。

在需要實時播放視頻的應用程序中,每幀1ms的改進可能是每秒30幀(這是視頻剪輯的常見速率)到29幀每秒之間的差異 - 視覺上 - 由於丟幀造成更糟)。在另一個運行過夜的應用程序中,兩個小時與三個小時之間可能不會產生任何真實世界的差異(但運行時導致數據庫的負載可能非常顯着 - 優化而非!)。

1

基本上當它是一個數量級或更好的完成工作單位。

  • 幾小時縮短到幾分鐘批量處理
  • 數分鐘到數秒用戶觸發間歇工藝,安裝,建立
  • 秒到第二用戶觸發過程
  • 第二即時用戶觸發過程
2

下面是一個簡單的測試:給某人未優化的系統並要求他們使用它。給他們優化的系統,並要求他們使用它。詢問他們是否可以說出差異,以及他們最喜歡哪一種。 (確保它是一個雙盲測試,並且系統在其他方面是相同的)。如果人們更喜歡優化的系統,那麼值得關注。

下面是一個更簡單的測試:你能區分不同嗎?如果你不能,那就不值得一提。 (另一方面,小的改進積累)。