當我們在資源文件中定義字符串常量而不是在claass中聲明爲const時,在堆內存佔用方面是否有優勢?對內存使用的影響 - 常量字符串或資源字符串?
回答
我不知道肯定,但它似乎是const
字符串將被分配不同的。特別是,他們不會有資格進行垃圾回收。所以它可能是它們與從資源加載的字符串相比,它們的開銷較少。但是,這種差異可能很小。除非你有大量的字符串,否則你不會注意到堆內存使用情況的差異。
const
用於事情永遠不會改變。資源字符串用於可能會改變的事物。你決定使用哪一個應該是基於此,而不是在堆上佔用更多空間。
要我knowlwdge字符串文字拘留(的String.intern),所以不存在重複和使用沒有額外撥款。我不認爲默認情況下資源字符串的行爲方式是一樣的。
如果這是一個問題,你可以有從資源自己的代碼閱讀和實習串並驗證它是否是你的情況是有益的。
邊注:常量字符串,並從資源字符串通常用於非常不同的目的(一個靜態的文化不變值,另 - 本地化,並有望成爲不同文化背景的不同)。應該有很好的理由將可本地化的字符串遷移爲代碼中的常量。
關於本地化的好處,他們確實服務於不同的目的。 –
你讀過關於string interning嗎? .NET保留一個字符串緩存,使得一個字符串在內存中只存在一次 - 可能會永遠存在。常量字符串將被禁用。動態構建的字符串(即使用StringBuilder)不會被攔截。
根據答案this question,在資源文件中字符串不拘留。如果這是真的,並且您的資源中加載了大量重複字符串的許多資源文件,則內存中可能會有大量字符串重複。
關於實習,非常好的一點,加上其他答案資源文件的意思是本地化,而不是優化。 –
更糟的是,資源文件上的字符串通過另一個字符串檢索 - ResourceManager用來從正確的區域性加載正確字符串的資源名稱。沒關係... –
- 1. 字符串資源
- 2. 拆分字符串,不影響源
- 3. 比較字符串存儲在Android的字符串資源?
- 4. 內部字符串資源引用
- 5. 使用字符串常量
- 6. 使用字符串常量
- 7. 字符串常量存儲
- 8. Java內存在字符串[]中對多個字符串使用
- 9. 字符串常量內存池
- 10. 如何使用間接字符串加載資源字符串?
- 11. 如何使用字符串資源名稱字符串數組
- 12. replaceAll不影響字符串
- 13. qt「資源」字符串
- 14. flexigrid的資源字符串
- 15. String.format對字符串沒有影響
- 16. rstrip()對字符串沒有影響
- 17. 字符串[]內存使用
- 18. REST數字或字符串資源標識符?
- 19. 所有字符串資源
- 20. android資源字符串%
- 21. 添加字符串資源
- 22. 訪問字符串資源
- 23. 字符串常量
- 24. 枚舉爲字符串或字符串常量
- 25. laravel編程中的字符串資源?
- 26. 在字符串內存儲字符串?
- 27. 資源字符串位置
- 28. ResourceNotFoundException - 字符串資源ID
- 29. 在資源路徑使用字符串
- 30. 存儲formattable字符串資源在string.xml
但是......實際上是從資源加載的字符串?這對我來說似乎很浪費。如果它是用C++編寫的,例如它將位於靜態存儲器的某個區域,從DLL加載而不需要打擾內存分配。如果是這樣的話,我會堅持const。 –