性能优化:字符串连接

字符串连接是将字符串追加到另一个字符串后面以形成更大字符串,这样的操作容易导致堆内存的过量分配。字符串连接大概有以下3种方式。
1.使用+操作符和+=操作符,这种方式最容易导致内存浪费的,因为它会导致分配链效应。每次+操作会产生1个临时的字符串,直到产生最终的字符串。
2.使用StringBuilder,如果我们可以提前知道字符串的最终大小,那么可以提前分配一个适当的缓冲区,以减少不必要的内存分配。它有点儿类似动态数组,如果当前已分配的内存空间不够时,会分配额外的。当然,最好是提前能预估合适的缓冲区,即避免浪费,也避免不够时的拓展。
3.字符串格式化API:string.Format()/string.Join()/string.Concat()。当我们如果无法知道最终字符串的大小时,使用方法2显然不合适。分配一个新的字符串对象,包含传入的字符串对象内容,一步完成,没有多余的字符串分配。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Text;
/*
 * Author:W
 * 字符串连接
 */
public class StringConnectTest : MonoBehaviour {

    string str1 = "Wang";
    string str2 = "Lun";
    string str3 = "Qiang";


    void Start()
    {
        StringConnect1();
        StringConnect2();
        StringConnect3();
        StringConnect4();
        StringConnect5();
    }

    /// <summary>
    /// 字符串+操作符连接
    /// </summary>
    private void StringConnect1()
    {     
        string str = str1 + str2 + str3;
        Debug.Log("+操作符连接===="+str);
    }

    /// <summary>
    /// StringBuilder
    /// </summary>
    private void StringConnect2()
    {
        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.Append(str1);
        stringBuilder.Append(str2);
        stringBuilder.Append(str3);

        string str = stringBuilder.ToString();

        Debug.Log("stringBuilder ====" + str);
    }


    /// <summary>
    /// 字符串格式化1-string.format()
    /// </summary>
    private void StringConnect3()
    {
        string str = string.Format("{0} {1} {2}",str1,str2,str3);

        Debug.Log("string.Format()====" + str);
    }


    /// <summary>
    /// 字符串格式2-string.Join()
    /// </summary>
    private void StringConnect4()
    {
        string str = string.Join(" ",new string[] { str1,str2,str3});

        Debug.Log("string.Join()====" + str);
    }

    /// <summary>
    /// 字符串格式3-string.Concat()
    /// </summary>
    private void StringConnect5()
    {
        string str = string.Concat(str1,str2,str3);

        Debug.Log("string.Concat====" + str);
    }
}

在这里插入图片描述
总结:使用+操作符连接字符串,确实比较方便。如果发现使用它时发现性能不佳时,可以考虑使用其他方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值