Можно ли получить размер (в байтах) объекта Session после хранения чего-либо, например, внутри него?
Я хочу получить размер конкретного объекта Session, такого как Session [ "table1" ], а не весь коллекцию сеансов, поэтому другой вопрос, хотя и полезен, не совсем дублирован.
Вы можете использовать сортировку для создания копии объекта, что даст вам приблизительное число, сколько памяти оно использует.
Но, как всегда, невозможно дать точную цифру использования памяти. Объект DataTable - это не единый массив памяти, который вы можете измерить. Он содержит много объектов, и у них есть ссылки между ними, и может быть несколько ссылок на один и тот же объект, что означает, что для каждой ссылки на него нет одной копии объекта. Каждый DataRow, например, имеет ссылку на таблицу, к которой он принадлежит, но это, конечно, не означает, что каждая строка имеет полную копию всей таблицы.
Вы можете использовать отражение, см. в этой статье.
Вы также можете рассмотреть возможность просмотра некоторых счетчиков производительности памяти или, возможно, профилирования вашего приложения с помощью такого инструмента, как DotTrace или CLR Profiler.
Это взято почти строка для строки из повторяющегося вопроса" из первого комментария в вопросе.
int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;
Возможно, вы можете использовать внешние инструменты, такие как CLR Profiler или VSTS Профайлер, чтобы проверить его.