Список <объект []> использующий больше памяти, чем DataTable?

Подобный тому, как Вы использовали бы единственный элемент для вычисления размера для одного нового для размещения, используйте массив тех элементов для вычисления размера, требуемого для массива.

при требовании размера для других вычислений, где число элементов не может быть известно, можно использовать sizeof ([1]) и умножиться необходимым количеством элемента.

, например,

char *pBuffer = new char[ sizeof(A[NUMELEMENTS]) ];
A *pA = (A*)pBuffer;

for(int i = 0; i < NUMELEMENTS; ++i)
{
    pA[i] = new (pA + i) A();
}
5
задан Travis J 16 January 2015 в 22:02
поделиться

2 ответа

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

В вашем списке массивов данные хранятся так же, как и в таблице данных, но без накладных расходов на дополнительную информацию, которую таблица данных и все данные row contains.

Если вы хотите, чтобы он был более эффективным с точки зрения памяти, вы должны создать класс для записи данных, таким образом вы можете сохранять типы значений как простые значения, а не упакованные в объекты. Например, int использует 20 байтов в упаковке, но только 4 байта в качестве простой переменной-члена.

4
ответ дан 14 December 2019 в 19:17
поделиться

Просто из любопытства попробуйте вызвать TrimExcess в списке, а затем проверьте память. Я сомневаюсь, что это будет иметь большое значение, но я подозреваю, что это будет иметь какое-то значение.

В основном список растет партиями. Он не увеличивается на единицу каждый раз, когда вы добавляете объект, скорее он увеличивается на определенную величину, а затем, если ему нужно больше, он выделяет больше. Мне любопытно, есть ли в вашем списке лишнее место, которое вы не используете.

1
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: