当我们在资源文件中定义字符串常量而不是在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。 –