Если у меня есть список, который я хочу обрезать для сохранения памяти, я, похоже, могу установить емкость списка, а затем ждать, пока GC освободит память. Когда список получает повышение до следующего поколения, выделенная для него память, по-видимому, является функцией емкости списка, а не первоначально выделенной памятью. Это позволяет мне полностью копировать, и в конечном итоге это означает, что всего 1 копия полностью.Могу ли я убедить сборник мусора усечь список? Массив?
var x = new List<double>(50000000) { 1, 2, 3 };
//Lots of memory used here
GC.Collect(2);
//Still lots of memory used
x.Capacity = 3;
GC.Collect(2);
//Much less memory now used
Можно ли как-то сделать с массивами?
Обратите внимание, что я не намерен принудительно принудительно использовать GC - это просто для иллюстрации того, что когда GC в конечном итоге происходит, память освобождается.
Нет, вы можете «сжать» это вашей собственной личностью http://stackoverflow.com/questions/12231569/is-there-in-c-sharp-a-method-for-list-like-resize-in-c-for-vectort –
Ну, у VB.NET есть 'ReDim Preserve', но я не нахожусь в компьютер, чтобы использовать Reflector, чтобы подтвердить, как это делается. –
Я думаю, что вы предполагаете, что емкость не копирует внутренний массив на меньший –