2015-03-20 3 views
4

У меня есть массив данных, которые время от времени обнуляются. Для этого нужно создать экземпляр нового массива или использовать метод Array.Clear?Должен ли я создать новый массив или использовать array.clear?

Например,

int workingSet = new int[5000]; 

// Other code here 

workingSet = new int[5000]; 
// or 
Array.Clear(workingSet, 0, 5000); 
+1

Будет ли новый массив всегда иметь такое же количество элементов, как и старый? – MarcinJuraszek

ответ

7

Когда вы делаете новый массив вместо старого , C# будет:

  1. Сделать старый массив для предварительно допущен сбора мусора, и в конце концов освободить его
  2. Выделяет новый массив
  3. Заполните новый массив нулей.

Когда вы держите старый массив, C# будет

  1. Заполните старый массив нулями.

При прочих равных условиях второй подход более эффективен.

+0

Я бы сказал не всегда ... для небольших массивов первый подход быстрее AFAIK .... но не уверен! –

+1

Второй подход может также поддерживать массив в различных GC, перемещая его в старшее поколение. Это может увеличить количество тяжелых глобальных ГК. – acelent

2

Если массив будучи во многих местах, безопаснее использовать Clear(), поскольку это гарантирует, что все экземпляры одного и того же массива продолжают ссылаться на один и тот же массив.

1

Array clear обычно имеет лучшую производительность, когда у вас есть большой массив .... Я имею в виду тысячи элементов. В противном случае для небольших массивов просто используйте новые. Если вы используете этот массив в других местах вашего кода, например. между потоками, вы должны использовать ясно, чтобы убедиться, что everythread будет работать с обнуляется/дефолтом массива

вы можете легко проверить это самостоятельно с некоторым механизмом секундомера или профилирующими инструментами

Смежные вопросы