【瑞模网】Unity String 字符串的优化

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

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, strin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值