Каждое приложение имеет свой собственный профиль производительности для использования базы данных, и возможности - он, будет изменяться со временем.
лучшая вещь, которую можно сделать, состоит в том, чтобы протестировать опции. Переключение между MyISAM и InnoDB тривиально, так загрузите некоторые данные тестирования и запустите jmeter против Вашего сайта и посмотрите то, что происходит.
Вызов resize ()
с меньшим размером не влияет на емкость вектора
. Это не освободит память.
Стандартная идиома для освобождения памяти из вектора
- это swap ()
его с пустым временным вектором
: ] std :: vector
. Если вы хотите уменьшить размер, вам нужно будет скопировать исходный вектор в новый локальный временный вектор, а затем заменить полученный вектор исходным.
Обновлено: В C ++ 11 добавлена функция-член shrink_to_fit ()
для этой цели это необязательный запрос на уменьшение capacity ()
до size ()
.
Фактически, стандарт действительно определяет, что должно произойти:
Это из вектора
, но тема одинакова для всех контейнеров ( список
, deque
и т. Д.)
23.2.4.2 емкость вектора [lib.vector.capacity]
void resize (size_type sz, T c = T ());
6) Эффекты:
if (sz > size())
insert(end(), sz-size(), c);
else if (sz < size())
erase(begin()+sz, end());
else
; //do nothing
То есть: если размер, указанный в resize
, меньше количества элементов, эти элементы будут удалены из контейнера. Что касается capacity ()
, это зависит от того, что с ним делает erase ()
.
Я не могу найти его в стандарте, но почти уверен clear ( )
определяется как:
void clear()
{
erase(begin(), end());
}
Следовательно, эффекты clear ()
на capacity ()
также связаны с эффектами erase ()
. Согласно стандарту:
23.2.4.3 модификаторы вектора [lib.vector.modifiers]
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
4) Сложность: деструктор T вызывается столько раз, сколько стертых элементов ....
Это означает, что элементы будут разрушены, но память останется нетронутой. erase ()
не влияет на емкость, поэтому resize ()
и clear ()
также не действуют.
erase ()
не влияет на емкость, поэтому resize ()
и clear ()
также не действуют. но память останется нетронутой. erase ()
не влияет на емкость, поэтому resize ()
и clear ()
также не действуют. Емкость никогда не уменьшится. Я не уверен, что это явно указано в стандарте, но это подразумевается: итераторы и ссылки на элементы вектора не должны быть аннулированы resize (n)
if n