Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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#_Xna - Fatal编程技术网

C# 如何加快速度?

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

它似乎运行非常缓慢,大约需要1微秒,考虑到我调用它的次数,这是一个很长的时间,如何使它更快?

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));