【U3D性能优化教程——Mono内存篇】之二:StringBuilder的应用&字符串优化

 

 

 

本文由@唐三十胖子出品,转载请注明出处。  
文章链接:https://blog.csdn.net/iceSony/article/details/83000611

 

 

 

这篇文章由唐三胖ヾ(•ω•`)o网络整理总结,针对Mono概念的系列优化教程。

 

通过这篇文章,你可以知道如何通过优化字符串减少GC

 

1.字符串拼接:用StringBuilder,同一块地址空间开辟

for (int i = 0; i < 100; i++)
{
	String str1 = "img"+i;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
	sb.Remove(0, sb.Length);
	//sb.Length = 0; 这种方式也会清空stringbuilder,但比remove慢
	sb.Append("img").Append(i);
}

尤其是在update中,性能差距非常大,每次都开辟新空间

StringBuilder sb = new StringBuilder();
void Update()
{
    for (int i = 0; i < 100; i++)
    {
	String str1 = "img"+i;
    }
		
    for (int i = 0; i < 100; i++)
    {
	sb.Remove(0, sb.Length);
	sb.Append("img").Append(i);
    }	
}

2.字符串拼接:可以的话放到两个组件里

比如label拆成label1 label2

label.Text = “now time is ”+Time.deltaTime;

优化后

label1.Text = “now time is ”
Label2.Text = Time.deltaTime

3.格式化字符串:非必要还用StringBuilder

如果不是需要改格式

String str = String.Format("{0:00}..{1:00}", num1, num2);

仅仅是字符串的拼接还是这么写

StringBuilder sb = new StringBuilder();
String str = String.Format("{0}..{1}", num1, num2);
sb.Append(num1).Append("..").Append(num2);

4.字符串比较:用无gc版本对比替换==

普通的对比如下

String str1 ="Default";
String str2 = "Player(Clone)";
if (str1 == str2)//编译以后调用的还是equal方法
{
//......
}

if (str1.Equals(str2))
{
//......
}

没有区别,但是如果str调用的是GameObject.tag或者GameObject.name都会产生GC

gameObject.CompareTag(str)替换== 比较,这是unity的无GC方法

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值