C# 如何加快速度?
它似乎运行非常缓慢,大约需要1微秒,考虑到我调用它的次数,这是一个很长的时间,如何使它更快?C# 如何加快速度?,c#,xna,C#,Xna,它似乎运行非常缓慢,大约需要1微秒,考虑到我调用它的次数,这是一个很长的时间,如何使它更快?AddRange如果您有一个数组或另一个集合,您可以将其转换为一个数组,那么它非常方便;但是,在这里您也可以反复调用Add chunk_indices.AddRange(new int[6] { 0 + length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length }); 通常AddRange方法接受参数数组,所以您可以尝试 chu
AddRange
如果您有一个数组或另一个集合,您可以将其转换为一个数组,那么它非常方便;但是,在这里您也可以反复调用Add
chunk_indices.AddRange(new int[6] { 0 + length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length });
通常AddRange方法接受参数数组,所以您可以尝试
chunk_indices.Add(length);
chunk_indices.Add(length + 1);
chunk_indices.Add(length + 2);
chunk_indices.Add(length + 3);
chunk_indices.Add(length + 2);
chunk_indices.Add(length + 1);
另一种方法是数组。像这样复制
chunk_indices.AddRange(length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length);
AddRange的内部实现通常调用Array.Copy或CopyTo。因此,AddRange的性能不可能比普通的Array.Copy更好
进一步的研究发现了另一种选择,比以前的选择更快:
int[] source = new int[6] { 0 + length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length });
//
// Assuming the chunk_indices has 6 elements already allocated.
//
Array.Copy(source, chunk_indices, 6);
我不太喜欢C#,但“0+length”似乎有点毫无意义。是否愿意提供更多的上下文(例如,chunk_索引的类型;如果您编写了AddRange(),那么它的源代码等)?另外,您是否确实需要在此处创建新阵列?您确定这是算法中的瓶颈吗?1微秒真的很快。啊,是的,0+的长度是没有意义的。chunk_索引只是一个整数列表。我想我需要创建一个新数组,因为每次长度都不同。我使用了ANTS Performance Profile 7,这是我调用的函数中最慢的一个。编译器优化了
0+
。重复答案(dtb的答案)也可以是静态数组,以避免每次内存分配。
// Copy the first 24 bytes from source to chunk_indices
Buffer.BlockCopy(source, 0, chunk_indices, 0, 6 * sizeof(int));