Могу ли я получить размер объекта Session в байтах в c #?

2

Можно ли получить размер (в байтах) объекта Session после хранения чего-либо, например, внутри него?

Я хочу получить размер конкретного объекта Session, такого как Session [ "table1" ], а не весь коллекцию сеансов, поэтому другой вопрос, хотя и полезен, не совсем дублирован.

  • 4
    Дубликат: stackoverflow.com/questions/198082/…
  • 0
    Я хочу получить размер определенного объекта Session, такого как Session ["table1"], а не всей коллекции Session?
Теги:
session

4 ответа

5
Лучший ответ

Вы можете использовать сортировку для создания копии объекта, что даст вам приблизительное число, сколько памяти оно использует.

Но, как всегда, невозможно дать точную цифру использования памяти. Объект DataTable - это не единый массив памяти, который вы можете измерить. Он содержит много объектов, и у них есть ссылки между ними, и может быть несколько ссылок на один и тот же объект, что означает, что для каждой ссылки на него нет одной копии объекта. Каждый DataRow, например, имеет ссылку на таблицу, к которой он принадлежит, но это, конечно, не означает, что каждая строка имеет полную копию всей таблицы.

1

Вы можете использовать отражение, см. в этой статье.

Вы также можете рассмотреть возможность просмотра некоторых счетчиков производительности памяти или, возможно, профилирования вашего приложения с помощью такого инструмента, как DotTrace или CLR Profiler.

0

Это взято почти строка для строки из повторяющегося вопроса" из первого комментария в вопросе.

int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;
  • 1
    Сериализация добавляет много метаданных, которые включены в размер.
  • 0
    Я согласен. Получить программный размер объекта нелегко. Метод, который я дал, является в лучшем случае приблизительной оценкой, а в худшем - чрезмерно преувеличенным.
0

Возможно, вы можете использовать внешние инструменты, такие как CLR Profiler или VSTS Профайлер, чтобы проверить его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню