Как узнать размер сеанса ASP.NET, когда в нем есть не сериализуемые объекты? - PullRequest
2 голосов
/ 15 апреля 2009

У меня такое ощущение, что я помещаю довольно много данных в мою сессию ASP.NET, но я не знаю, сколько и стоит ли мне беспокоиться. Я нашел похожий вопрос , но он основан на сериализации объектов и проверке их сериализованного размера. В моем случае большинство данных в сеансе находятся в объектах из другой библиотеки, классы которой не помечены как «Сериализуемые». (Я знаю, что это ограничивает меня в использовании поставщика состояния сеанса InProc, но это другая проблема). У кого-нибудь есть идеи о том, как обойти граф объекта и узнать его размер?

Добавлено: ОК, одним из способов будет ручной обход графа объектов и использование метода Marshal.SizeOf (). Но это много написано, чтобы заставить это работать. Есть ли, возможно, более простой способ достижения того же эффекта? Я не стремлюсь к точности байтов, меня интересует порядок величин (килобайт, мегабайт, десятки мегабайт ...)

Ответы [ 3 ]

1 голос
/ 15 апреля 2009

Для тестирования вы можете собрать заготовку провайдера Custom Session, реализуя абстрактный класс SessionStateStoreProviderBase. Я хотел бы написать вспомогательные поля, которые хранят все в WebCache (чтобы вы могли управлять данными сеанса), и в конечном итоге генерировать статистику, используя метод Marshal.SizeOf (), когда вызывается метод SetAndReleaseItemExclusive.

        public override void SetAndReleaseItemExclusive(HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem)
        {

        double MemSize = 0;
        foreach (object sessObj in item.Items)
        {
            MemSize += Marshal.SizeOf(sessObj);
        }

}

Обратитесь к этому вопросу для получения дополнительной информации о получении размера поля: Получение размера поля в байтах с помощью C #

1 голос
/ 15 апреля 2009

вы не можете сгенерировать дамп кучи и определить размер сеанса из этого. в java земле я могу выгрузить кучу, затем открыть ее в mat , найти объект сеанса и узнать размер подграфа.

0 голосов
/ 15 апреля 2009

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

Если возможно, проверьте свой дизайн еще раз, чтобы увидеть, можете ли вы минимизировать информацию в сеансе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...