/ / C # ¿Cómo acelerar esto? - c #, xna

C # ¿Cómo acelerar esto? - c #, xna

chunk_indices.AddRange(new int[6] { 0 + length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length });

Parece funcionar muy lentamente y toma alrededor de 1 microsegundo, lo que es mucho tiempo considerando cuántas veces lo llamo, ¿cómo puedo hacerlo más rápido?

Respuestas

1 para la respuesta № 1

AddRange es útil si tiene una matriz u otra colección que puede transformar en una matriz para comenzar; sin embargo, aquí puedes llamar Add repetidamente también.

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

1 para la respuesta № 2

Otra forma es Array. Copia como esta.

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

La implementación interna de AddRange llama a Array.Copy o CopyTo normalmente. Por lo tanto, es imposible que AddRange tenga un mejor desempeño que un Array.Copy simple.

Más investigación reveló otra opción, más rápida que la anterior:

// Copy the first 24 bytes from source to chunk_indices
Buffer.BlockCopy(source, 0, chunk_indices, 0, 6 * sizeof(int));

0 para la respuesta № 3

En general, el método AddRange acepta la matriz de parámetros para que pueda probar

chunk_indices.AddRange(length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length);