在性能方面對象類型轉換的成本如何?
我應該儘可能避免類型轉換嗎?對象類型轉換的性能
6
A
回答
9
它足夠便宜,它屬於過早優化的範疇。不要浪費時間思考或提出問題,除非您已經對應用程序進行了描述,並確定這是一個問題,最重要的是:不要爲了避免它而妥協於您的設計。
0
不,它不應該影響性能足夠重要。
2
類型轉換會產生成本,因爲必須檢查運行時類型信息以確保轉換將工作。與其他一切相比,我懷疑這將是重大的,但你可以嘗試和衡量它。
更一般地說,類型轉換是(恕我直言)表明某種東西在設計中不正確。當然,有時候你無法避免它(例如使用舊版集合),但我一定會看到我是否可以刪除它。
4
取決於你的意思是類型轉換。沒有任何費用的「上傳」會導致你很多費用。第二個答案也是以「取決於」開始。通常我會避免在代碼中進行向下轉換,因爲從我的經驗來看,如果它在代碼中被過度使用,則意味着設計很糟糕。而另一方面,這並不一定意味着根本不應該使用它。
4
JavaWorld: The cost of casting
鑄造用於 類型之間轉換 - 在 特別是引用類型之間,在其中我們感興趣 這裏鑄造 操作的類型。
上溯造型操作(也稱爲在Java 語言規範 擴大轉換)轉換 子類參考祖先 類引用。這種鑄造 操作通常是自動的,因爲 它總是安全的,並且可以由編譯器直接執行 。
低迷現狀操作(也稱爲在Java 語言規範 收縮轉換)轉換一個 祖先類參考子類 參考。此鑄造操作 會產生執行開銷,因爲Java 要求在 運行時檢查強制轉換以確保其有效。 如果引用的對象不是任一目標類型爲 鑄造或該類型的子類的實例 , 嘗試鑄造不允許 和必須拋出 java.lang.ClassCastException。
相關問題
- 1. 對象類型的轉換
- 2. 對象不能轉換爲類型「customObject」
- 3. 對象不能轉換爲類型MyCustomType
- 4. 不能隱式轉換對象類型
- 5. 對象不能轉換爲類型「Sys.Component」
- 6. c#對象類型轉換
- 7. 對象類型轉換
- 8. 對象類型轉換
- 9. 轉換對象類型
- 10. 類型轉換對象
- 11. 屬性網格類型'System.String'的對象不能轉換爲'x'類型
- 12. subsonic 3 - 類型'System.Byte []'的對象不能轉換爲類型'System.String'
- 13. Subsonic:類型'System.UInt64'的對象不能轉換爲'System.Int64'類型
- 14. 異常「類型'System.Object []'的對象不能轉換爲類型」
- 15. 轉換對象類型Microsoft.Xrm.Sdk.OptionSetValue型
- 16. 將泛型類型轉換爲對象
- 17. 將類類型對象轉換爲Intptr
- 18. 轉換Person類型的對象toString()?
- 19. 無法轉換類型的對象「System.Collections.Generic.List
- 20. 轉換對象的C++內置類型
- 21. 無法轉換類型「System.String」的對象
- 22. 類的對象不能轉換int
- 23. ActiveRecord對象屬性的自定義類型轉換方法
- 24. 從Enthoughts特性到python本機對象的類型轉換
- 25. 做setValuesForKeysWithDictionary時管理對象屬性的動態類型轉換
- 26. 將對象類型轉換爲Objective-C中的子類對象類型C
- 27. 通用對象的類型轉換(從類型對象特定類)
- 28. 類型轉換性能優化?
- 29. 快速類型轉換性能成本
- 30. ksoap對象屬性不能轉換
+1:儘管性能可能會有點貴,但一個好的設計是避免它的更重要原因。 ;) – 2012-01-10 12:54:18