C # как ускорить это? - PullRequest
       6

C # как ускорить это?

1 голос
/ 03 марта 2012
chunk_indices.AddRange(new int[6] { 0 + length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length });

Кажется, что он работает довольно медленно и занимает около 1 микросекунды, что много времени, учитывая, сколько раз я звоню, как я могу сделать это быстрее?

Ответы [ 3 ]

1 голос
/ 03 марта 2012

Другой способ - это 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);

Внутренняя реализация AddRange обычно вызывает Array.Copy или CopyToСледовательно, AddRange не может работать лучше, чем обычный Array.Copy.

Дальнейшие исследования выявили еще один вариант, более быстрый, чем предыдущий:

// Copy the first 24 bytes from source to chunk_indices
Buffer.BlockCopy(source, 0, chunk_indices, 0, 6 * sizeof(int));
1 голос
/ 03 марта 2012

AddRange удобно, если у вас есть массив или другая коллекция, которую вы можете преобразовать в массив для начала; тем не менее, здесь вы также можете повторно вызывать Add.

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);
0 голосов
/ 03 марта 2012

Обычно метод AddRange принимает массив параметров, поэтому вы можете попробовать

chunk_indices.AddRange(length, 1 + length, 2 + length, 3 + length, 2 + length, 1 + length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...