我想问一下,考虑到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创建的游戏项目中看到第一个项目被使用了。
提前致谢。
答案 0 :(得分:4)
没有理由进行多次具有相同结果的计算,尤其是涉及内存分配时。你的第一个片段的时间和内存性能更差,这是正确的。
每次调用split都会遍历字符串(可能是所有这些中最快的部分),分配两个新数组并复制很多子字符串。对于此类操作,您应始终存储结果,而不是进行两次调用。
技术上甚至属性访问都可以以非常小的性能增益进行存储,但除非在上述情况下,否则大多数情况下你都不应该费心。
答案 1 :(得分:1)
您无需重复相同的拆分操作...... 最好的是:
string[] splitedData = data.Split('|');
a= splitedData[0];
b = splitedData[1];
c = splitedData[2];
d = splitedData[3];
e = splitedData[4];