Лучше ли использовать этот конструктор?
Определенно. При манипулировании большими объемами данных это может сделать приложение намного более эффективным, поскольку оно эффективно предотвращает повторное выделение и копирование больших пакетов данных при непрерывном заполнении контейнера.
Чтобы привести пример, используя структуру данных List
:
В обоих случаях вставка фактически имеет одинаковое амортизированное постоянное время выполнения. Это означает, что независимо от размера контейнера операция Add
будет занимать постоянное время. Однако это верно только в среднем. Если размер контейнера должен быть внутренним, потому что в противном случае он был бы переполнен, эта операция Add
фактически принимает O ( n ), то есть его время пропорционально размеру контейнера.
В течение многих добавленных элементов это не будет иметь большого значения, но для больших n одна операция вставки может восприниматься пользователем, если пользовательский интерфейс замерзает во время этого время.
Это никогда не произойдет, если вы уже зарезервировали достаточно большую емкость с самого начала.
Если да, то есть ли какое-то правило относительно какого-то "магического числа", которое вы должны использовать?
Нет. Если вы знаете (даже приблизительный) размер, используйте его. Если нет, не беспокойтесь. Стратегия автоматического увеличения для этих контейнеров на самом деле довольно хороша, и в большинстве случаев догадки будут намного беднее (если у вас нет обоснованного предположения, но тогда это не совсем догадки, не так ли?).