美文网首页
查找string关于gc优化方法发现的知识点

查找string关于gc优化方法发现的知识点

作者: 光棍狗没有可持续发展 | 来源:发表于2018-05-16 21:46 被阅读0次

using UnityEngine;

using UnityEngine.UI;

using System.Collections;

using System.Text;

public class SpeedString {

public string string_base;

public StringBuilder string_builder;

private char[] int_parser = new char[11];

public SpeedString(int capacity){

string_builder = new StringBuilder(capacity,capacity);

string_base = (string)string_builder.GetType().GetField(

"_str",

System.Reflection.BindingFlags.NonPublic |

System.Reflection.BindingFlags.Instance).GetValue(string_builder);

}

private int i;

public void Clear(){

string_builder.Length = 0;

for(i=0;i

string_builder.Append(' ');

}

string_builder.Length = 0;

}

public void Draw(ref Text text){

text.text = "";

text.text = string_base;

text.cachedTextGenerator.Invalidate();

}

public void Append(string value){

string_builder.Append(value);

}

int count;

public void Append(int value){

if(value >= 0){

count = ToCharArray((uint)value,int_parser,0);

}

else{

int_parser[0] = '-';

count = ToCharArray((uint)-value,int_parser,1)+1;

}

for(i=0;i<count;i++){

string_builder.Append(int_parser[i]);

}

}

private static int ToCharArray(uint value, char[] buffer,int bufferIndex) {

if (value == 0) {

buffer[bufferIndex] = '0';

return 1;

}

int len = 1;

for (uint rem = value/10; rem > 0; rem /= 10) {

len++;

}

for (int i = len-1; i>= 0; i--) {

buffer[bufferIndex+i] = (char)('0'+(value%10));

value /= 10;

}

return len;

}

}

public class Panel_Test : MonoBehaviour {

public Text velocity;

public SpeedString velocity_string = new SpeedString(32);

void Update(){

//Stats

velocity_string.Clear();

velocity_string.Append(last_velocity);

velocity_string.Append(" MPH");

velocity_string.Draw(ref velocity);

}

}

通过反射Type.GetField()获取StringBuilder的属性_str,重复利用该内存达到减少gc的目的。

StringBuilder.Length = 0 之后使用StringBuilder.Append()将从0开始衔接,如果衔接的字符比之前的字符短,之前的字符将会保留,也就是设置Length =0并不会清空StringBuilder,只是重设了衔接的下标

https://forum.unity.com/threads/stringbuilder-problem.122262/

相关文章

网友评论

      本文标题:查找string关于gc优化方法发现的知识点

      本文链接:https://www.haomeiwen.com/subject/lhwpdftx.html