2012-04-24 81 views
-1

在.NET中,在可伸縮性方面,在靜態類中的靜態方法和常規類中的實例方法之間會有什麼問題需要考慮?靜態或實例方法在.NET中擴展更好嗎?

如果在一個類中對靜態方法進行很多調用,是否會出現「日誌堵塞」?或者這不是問題。如果是這樣,使用實例方法會更好嗎?

就像調用GetCustomers()這樣的方法來調用客戶數據。

編輯: 問題不是關於對其他問題/答案中解決的每種類型方法的調用性能,而是關於可伸縮性的性能。如果你每秒鐘有10K個靜態調用,那麼靜態方法會遇到問題嗎?或者沒有關係。

回答

1

真的沒關係。重要的是該方法是否需要訪問該類的特定實例的狀態。如果沒有,你可以把它變成靜態的,如果不是的話就不能。如果你嚴格要求在理論基礎上,那麼假設該方法不需要訪問實例狀態數據,那麼顯然對於靜態方法有一點小的優勢,因爲你不必在堆上按順序創建一個無用的對象使用它......如果你將它作爲一個實例方法,你將不得不創建一個實例(只有一個實例,因爲它不需要任何狀態數據,哪個實例或者實例的狀態是什麼並不重要) - 只有一個實例,無論你需要多少次調用它...

但在一個典型的大小類的一個實例並不是一個繁重的命中......假設這個類(類型)不需要3千兆字節的堆空間!

2

否;它不會有任何真正的區別。

如果不依賴實例,方法應該是static

1

如果方法依賴於特定的對象實例,則靜態方法和實例方法在性能方面應該沒有區別。如果不需要實例,靜態方法可能會稍微快一點。

其原因在於,在內部,實例方法幾乎與採用實例參數的靜態方法相同。因此,應該沒有可衡量的差異。

不需要實例的靜態方法幾乎肯定會更快,但很少。如果調用具有相同參數的實例方法和靜態方法,那麼實例方法將需要將一個額外參數推送到堆棧:要運行的實例。

雖然這樣做的速度非常小,但使靜態非特定於實例的方法通常是一個好主意。如果您需要了解其中的差異,可以對其進行分析,但我猜測會有一個小的信噪比,並且您可能沒有學到任何有用的東西。

+0

小建議..你的第一句話寫的是錯......我會說 如果方法依賴於一個特定的對象實例,那麼靜態方法和實例方法之間存在巨大差異。 - 靜態方法不會編譯... – 2012-04-24 01:38:47

相關問題