【Unity3d】注意C#的字符串拼接效率问题

现在项目中用的Log输出机制, 都是使用StringBuilder进行字符串拼接的, 那么为什么要使用StringBuilder进行字符串拼接呢?


一开始是这样的:


private string content;

public void log(string text)
{
	content += text;
}

public void log2File(string filename)
{
	File.WriteAllText(filename, content);
}

后来发现, 当运行一段时间之后, 会发生偶现的卡顿现象,分析热点后发现在log处

假设系统之前已经产生了1万条Log, 每条Log是100个字节, 在Log高峰时每秒产生50条Log

那么会是什么结果?

首先content 的大小为 10000* 100 = 976KB

那么输出50个Log, 会产生: (976KB+100B)+(976KB+100B+100B)+...+(976KB+100B*50)  ≈ 50M

也就是说, 输出50条100字节的Log, 会产生50M内存数据的移动

如果之前曾经产生过10万条Log, 就会生产500M内存数据的移动!!!


这个问题其实很简单, 但是如果不小心踩到了, 就是个坑, 正确方法是这样:

private StringBuilder content;

public void log(string text)
{
	content.Append(text);
}

public void log2File(string filename)
{
	File.WriteAllText(filename, content);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值