2011年5月25日 星期三

何種情況下 global variable 是可以被接受的

作者: qrtt1 (null) 看板: Soft_Job
標題: Re: [請益] java的效能!?
時間: Mon May 23 02:06:31 2011

※ 引述《pandaforme (建   建)》之銘言:
: 事情這樣的
: 因為公司的主管很排斥物件導向概念和新的技術
: 認為程式擁有太多class,必須要一直new產生一個新的instance,會花費很多效能!?
: 引用structs架構也會拖慢效能!?
: 所以公司的程式充斥一堆static的function和自己硬幹的詭異方法...
: 主要的理由是因為公司的程式是裝在一台伺服器,當作產品賣出
: 為了節約硬體資源,所以要避免過多的物件導向概念...
: 想請問一下各位前輩事實真的如此嗎?
: 假如是以前的電腦還有可能有這樣的問題發生,但是現在電腦都那麼快
: 頻繁的產生instance會影響到系統效能嗎?
: 而且沒有物件導向概念的程式,真的會看到吐血,所有東西都混雜在一起!
: 之後,維護起來一定是個大災難,連基本的分層概念都沒有...
: 麻煩有相關經驗的前輩,提供一下相關資訊,
: 真的將系統物件導向化會導致系統效能下降嗎?
: 謝謝~

關於效能這件事,我想其實跟語言無關。
但這並不是說我要巔覆實作同樣的演算法 C 多數的情況優於許多語言這件事。
而是程式語言通常不在我們決定的選項之內。
也許是我資歷尚淺,比較少參公司全新的計劃。
所接觸的,都是已經用某種語言,或某個設計的好架構的成品。
可能是 Web 可能是 Library 或手機 Application
身為一名開發者與其指稱一個特定的語言,
或特定的寫作文化(物件導向)會導致效能低落。
是種空泛、空虛的說法。

實際的情況是,對於效能。
我們希望做了某些改善而讓下一個版本,
在某些項目的數據看起來比先前更好。
對於 Web App 來說,
它可能是針對資料庫存取是不是會過份延遲使得者得到回應的時間。
是不是太依賴 Session 而使用過多記憶體,
讓同使間服務使用者的人數無法更多。
對 Android App 程式來說,
若要實作 Media Player 或需大量更新畫面的情況
頻繁 GC 是否造成較差的使用者觀感

無論我們在做什麼『那個最終的成品』
都能透過 Profiling Tool 列出種各的數據。
各 Thread 內 method call 用的時間階層
各 Thread 執行時間的記憶體快照。
有了這些,才足描述目前成果的『效能』
有了客觀的數據,才能決策或診斷效能的瓶項。

而原 PO 提到的一些普遍的說法,只是被一些刻板印象塘塞了。
我們不能只在記憶中的回味那些原則,得看看現實的狀態。
能分享一篇網友在 stackoverflow 的提問:

何種情況下 global variable 是可以被接受的?
http://stackoverflow.com/questions/357187/when-are-global-variables-acceptable

我喜歡其中一篇的答案:
A global variable in a 100-line program has a scope of 100 lines.
But a member variable in a 1000-line class has a scope of 1000 lines.
The latter may be worse.

原則很重要,但透過自己分析問題與解答的契合程度也很重要。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.172.178
→ askeing:的確,適時根據情況調整程式碼感覺會比較恰當              05/23 02:28

沒有留言:

張貼留言

您好.本資料庫並非第一手資料.如果你有對文章作者的詢問,意見與需求,請自行找尋文章作者並提供意見,謝謝.