哪个更优选?在C#中拆分字符串时的性能或内存?

时间:2016-11-11 14:43:54

标签: c# performance unity3d

我想问一下,考虑到C#中的垃圾收集,内存和CPU使用情况,下面两种情况比另一种更优选。

a = data.Split('|')[0];
b = data.Split('|')[1];
c = data.Split('|')[2];
d = data.Split('|')[3];
e = data.Split('|')[4]; 

string[] splitedData = data.Split('|');

a= splitedData[0];
b = splitedData[1];
c = splitedData[2];
d = splitedData[3];
e = splitedData[4];

我更喜欢第二个,因为我认为持有分割数据数组引用并使用该引用进行访问的CPU密集程度较低,并且使用较少的内存访问。

第一个使用更多的cpu并且每次创建一个数组(填充和访问数组也需要更多的内存操作)以便相应地获取数据。

我问这个问题是因为我在Chupamobile创建的游戏项目中看到第一个项目被使用了。

提前致谢。

2 个答案:

答案 0 :(得分:4)

没有理由进行多次具有相同结果的计算,尤其是涉及内存分配时。你的第一个片段的时间和内存性能更差,这是正确的。

每次调用split都会遍历字符串(可能是所有这些中最快的部分),分配两个新数组并复制很多子字符串。对于此类操作,您应始终存储结果,而不是进行两次调用。

技术上甚至属性访问都可以以非常小的性能增益进行存储,但除非在上述情况下,否则大多数情况下你都不应该费心。

答案 1 :(得分:1)

您无需重复相同的拆分操作...... 最好的是:

string[] splitedData = data.Split('|');

a= splitedData[0];
b = splitedData[1];
c = splitedData[2];
d = splitedData[3];
e = splitedData[4];