Hello 小伙伴们大家好,今天和大家分享一下“字符串的优化”。
首先,通过跟踪 System.String 类,我们看到 string.Format 在最终的实现过程中是重新new了一个 StringBuilder。因此我们可以使用在对字符串进行 Format 操作的时候直接共用一个StringBuilder即可,具体实现如下:
private static StringBuilder stringBuilder = new StringBuilder();
public static string Format(string str, params object[] args)
{
stringBuilder.Remove(0, stringBuilder.Length);
stringBuilder.AppendFormat(str, args);
return stringBuilder.ToString();
}
StringBuilder.Format 的消耗其实也是挺大的,最终调用的是 AppendFormatHelper 这个函数,里面实现也是极其复杂,因此能尽量不用 Format 的时候尽量不用 Format。可以考虑使用 Concat 函数来代替。
string.Concat 每次使用都会重新生成一个 string,然后对其进行数据填充。当我们需要 Concat 的数据比较多的时候,里面每次都会判断填充的数据是否为null,循环体里都会有个objct转string的操作,其实大可不必如此。既然我们之前已经有一个通用的StringBuilder了,可以直接公用即可,每次使用之前清除掉旧数据,实现循环使用。如下图所示:
public static string Concat(string str1, string str2)
{
stringBuilder.Remove(0, stringBuilder.Length);
stringBuilder.Append(str1);
stringBuilder.

本文探讨了Unity中字符串优化的方法,避免使用string.Format和多次string.Concat导致的性能损耗。建议使用StringBuilder进行格式化操作,并在适当情况下复用StringBuilder,减少内存分配。通过创建GString类和GStringSample测试脚本,实验证明优化后的代码显著降低了GC压力,从优化前的2.7MB减少到27.1KB。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



