resize()
не только выделяет память, но также создает столько раз, сколько желаемый размер , который вы передаете в resize()
в качестве аргумента. Но reserve()
выделяет только память, а не создает экземпляры. То есть
std::vector v1;
v1.resize(1000); //allocation + instance creation
cout <<(v1.size() == 1000)<< endl; //prints 1
cout <<(v1.capacity()==1000)<< endl; //prints 1
std::vector v2;
v2.reserve(1000); //only allocation
cout <<(v2.size() == 1000)<< endl; //prints 0
cout <<(v2.capacity()==1000)<< endl; //prints 1
Выход ( онлайн-демонстрация ):
1
1
0
1
Таким образом, resize()
может быть нежелательным, если вы не хотите объекты, созданные по умолчанию. Это тоже будет медленным. Кроме того, если вы push_back()
добавили к нему новые элементы, size()
вектора еще больше увеличит , выделив новую память (что также означает перемещение существующих элементов в вновь выделенное пространство памяти). Если вы использовали reserve()
в начале, чтобы обеспечить достаточную выделенную память, size()
вектора будет увеличиваться, когда вы push_back()
к нему, но он не будет выделять новую память еще раз, пока не закончится пространство, которое вы зарезервировали для него.
В коде, который вы указали, есть по крайней мере 2 проблемы.
Сначала ваш метод помечен атрибутом [ValidateAntiForgeryToken]
, но вы не передаете токен, поэтому метод никогда не будет запущен. Либо удалите атрибут, либо включите его (это предполагает, что ваша форма включает @Html.AntiForgeryToken()
)
data: {
__RequestVerificationToken: $('[name=__RequestVerificationToken]').val(),
.... // your other properties
},
Во-вторых, ваша публикация объекта javascript, поэтому вам нужно удалить опцию contentType: "application/json; charset=utf-8",
(или, альтернативно, вы необходимо сгенерировать данные, используя JSON.stringify()
. Замечание: его непонятно, из какого кода вы вручную создаете объект для отправки на контроллер. Если ваши элементы формы основаны на SaveGameViewModel
и правильно сгенерированный с помощью строго типизированных html-помощников, вы можете отправить его обратно с помощью
$.ajax({
data: $('form').serialize(),
....
});