Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪个更可取?在C#中拆分字符串时的性能或内存?_C#_Performance_Unity3d - Fatal编程技术网

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

哪个更可取?在C#中拆分字符串时的性能或内存?,c#,performance,unity3d,C#,Performance,Unity3d,我想问一下,考虑到C#中的垃圾收集、内存和cpu使用情况,下面哪种情况比另一种更可取 或 我更喜欢第二个,因为我认为持有分割的数据数组引用并使用该引用进行访问的cpu占用更少,并且使用的内存访问更少 第一种方法使用更多的cpu,每次创建一个数组(填充和访问数组也需要更多的内存操作),以便相应地获取数据 我问这个问题是因为我在Chupamobile创建的一个游戏项目中看到第一个被使用 提前感谢。没有理由多次执行具有相同结果的计算,尤其是在涉及内存分配的情况下。您的第一个代码段的时间和内存性能较差,

我想问一下,考虑到C#中的垃圾收集、内存和cpu使用情况,下面哪种情况比另一种更可取

我更喜欢第二个,因为我认为持有分割的数据数组引用并使用该引用进行访问的cpu占用更少,并且使用的内存访问更少

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

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


提前感谢。

没有理由多次执行具有相同结果的计算,尤其是在涉及内存分配的情况下。您的第一个代码段的时间和内存性能较差,这是正确的

对split的每次调用都将迭代字符串(可能是其中最快的部分),分配两个新数组并复制大量子字符串。对于这样的操作,您应该始终存储结果,而不是进行两次调用


从技术上讲,即使是属性访问也可以以很小的性能增益进行存储,但大多数情况下,除非在上述情况下,否则您不必麻烦。

您不需要重复相同的拆分操作。。。 最好的办法是:

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

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

你认为第一种方法有什么好处?在我看来,这就像是一个懒惰的编程。a)并不是你会遇到的每一段代码都经过了完美的优化以获得最高性能,b)绝大多数代码都不需要进行优化以获得最高性能。这个问题不涉及“性能或内存”,第一个例子不好。@martinstoeckli为什么第一个例子不好?@aod-我不理解也不欣赏这么多的反对票,因为在这个问题上确实有些东西需要学习。第一个示例的问题是,它的速度较慢,需要更多内存,因此不能在两者之间进行折衷。重要的是要理解,第一个示例确实创建了5个数组,每次使用一个元素,然后丢弃该数组。
string[] splitedData = data.Split('|');

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

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