2012-03-27 31 views
0

操作意味着什麼代價高昂,或者該資源在軟件方面成本高昂。當我遇到一些文件時,他們提到了像每次打開文件都是昂貴的操作。我可以有更多這樣的例子(數據庫連接是一個代價高昂的操作,線程池是一個更便宜的,等等。)。在什麼基礎上決定該任務或操作是否昂貴或更便宜?當我們計算這個約束時要考慮什麼?也是基於時間嗎?在軟件操作方面,「代價高昂」意味着什麼?

說明:我已經在網上查了這個,但是我沒有得到任何好的解釋。如果你發現和我分享,我可以關閉它..

回答

5

昂貴昂貴操作是那些使大量的資源被使用,如CPU,磁盤驅動器(多個)或記憶

例如,在創建的整數變量代碼不是一個代價昂貴或昂貴的操作

相反,創建一個到承載關係數據庫的遠程服務器的連接,查詢幾個表並返回在迭代之前保留一個大的結果集,同時保持連接到數據源將是(相對)昂貴或昂貴的,與我使用Integer的第一個示例相反。

爲了構建可擴展的快速應用程序,您通常希望將執行這些代價高昂的操作的頻率降至最低,並將優化,緩存,並行等技術應用於軟件操作的基本位置。

爲了獲得一定程度的準確性和一些實際的數字,在應用程序中「昂貴」和「便宜」是什麼,您可以使用某種分析或分析工具。對於JavaScript,有ySlow - 對於.NET應用程序,dotTrace - 我可以確定,無論平臺如何,都有類似的解決方案。然後由某人來理解輸出,這可能是最重要的部分!

0

它幾乎可以肯定地談論執行這種輸入/輸出的時間處罰。大量的內存洗牌(複製從具有許多成員的類創建的對象)是另一次浪費(通過引用有助於消除很多這種情況)。

1

運行時間,內存使用量或帶寬消耗是「成本」最典型的解釋。也考慮到它可能適用於開發時間的成本。

0

通常,昂貴的手段,以非常簡單的方式,它會花費比存儲器上的操作更長的時間。

例如,訪問文件系統中的文件並讀取每一行需要很長的時間,然後只需遍歷內存中相同大小的列表即可。 關於數據庫操作也是如此,它們需要比內存操作更長的時間,因此應該謹慎使用,以免濫用這些操作。

這是,我重複一個簡單的解釋。究竟是什麼昂貴的手段取決於你的特定環境,你正在執行的操作的數量,以及系統的整體架構。

1

我會嘗試通過一些實例講解:

如果你需要一個數據庫的每一行中編輯兩個領域,如果你在一個時間會是接近兩倍的時間做一個字段,如果這是正確的同時做兩個。

這個額外的時間,不僅是你的時間浪費,同時也拉開不再那麼需要一個連接不再那麼,需要佔用內存,並在一天結束時,你eficience去付諸東流。

當您啓動scalling,浪費時間極少量的成長爲公司資源很大的浪費。