powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC Core. Что с сессией?
17 сообщений из 17, страница 1 из 1
ASP.NET MVC Core. Что с сессией?
    #39892117
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Не могу нормально, быстро и элегантно использовать C# объекты в ASP.NET Core сессии. Предлагается использовать сериализацию в строку и из строки.

Ну хорошо бы все это сериализовывалось быстро. Но ведь код ниже

Код: c#
1.
2.
string classString = JsonConvert.SerializeObject(myobject);
HttpContext.Session.SetString(key, classString);



Модератор: Учимся использовать тэги оформления кода - FAQ

выполняется десятки секунд для экземпляров с мегабайт. А для пары мегабайт оно просто вылетает не говоря худого слова (ни ексепшн, ни еррор колбак функция не срабатывает).

Есть ли что-нибудь вроде HttpContext.Session.SetObject, чтоб обойтись без сериализации?
Есть ли какие-нибудь трюки, чтоб ускорить JsonConvert.SerializeObject?

Спасибо.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892121
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov,

С сессией всё хорошо. По возможности использование сессии нужно избегать. Хранить в сессии большие объекты размером больше мегабайта -- вы явно что-то делаете не так. Хотите кеш? Используйте кеш, не сессию.

У вас на выбор IMemoryCache -- для хранения данных в рамках одного экземпляра приложения без необходимости сериализации в строку. IDistibutedCache -- хранение данных в рамках любого количества экземпляров приложений (серверов), но уже потребуется сериализация в массив байт, что всё же быстрее чем JSON.

А сессия -- это что-то максимально лёгкое, для чего подойдёт строковой тип. Не более того. Лучше откажитесь от сессий.

Или расскажите для чего вы её используете, может чего подскажем.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892124
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Замена сессии на кеш автоматически приводит к изобретению велосипеда под названием сессия. Только домашнего изготовления. В кеше нужно будет организовывать его обслуживание, характерное для сессии.

Такое я делал. Использовал глобальный ConcurrentBag в апликейшене с отдельным потоком, который это осблуживает и убирает мусор. Ключом была сешон айди (т.е. сессия таки испольовалась для незначительных нужд). Не понравилось.

Задача стоит сохранять некие снэпшоты из базы данных для данного пользователя и хранить в них пользовательсие изменения до тех пор, пока пользователь на како-либо форме не нажмет кнопку сохранить. После сохранения данные ипользуются и модифиуируются на других формах. Кроме данных из БД над снэпшотами проделывается некий вычислстельный процесс при первой загрузке. Из чего следует, что не хранение снэпшота в состоянии означает долгий стартап при любой попытке его использовать.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892187
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov,

Исчо раз говорю, сессия для хранения промежуточных результатов для пользователя между запросами. Так как требуется поддерживать масштабирование из коробки, сессия должна серилизовываться, чтобы быть доступной в разных экземплярах приложения.

Хранить в памяти без серилизации, это не сессия, это кеш. При чём локальный кеш. Можете работать с ним как с сессией.

Раз приходится хранить некие снепшоты из базы для пользователя, значит задача решается херово. Нарушается один из основных принципов HTTP (без состояния).
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892198
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Задача стоит сохранять некие снэпшоты из базы данных для данного пользователя и хранить в них пользовательсие изменения до тех пор, пока пользователь на како-либо форме не нажмет кнопку сохранить.
Вот прям так и поставили задачу: "сохранять некие снэпшоты".
Может всё-таки задача по другому звучит, а через "некие снэпшоты из базы" - это уже попытка её реализации?

Renziglov
Кроме данных из БД над снэпшотами проделывается некий вычислстельный процесс при первой загрузке. Из чего следует, что не хранение снэпшота в состоянии означает долгий стартап при любой попытке его использовать.
А вот это звучит типа как обоснование выбранной реализации. Но какое-то оно не убедительное.

Какой ещё долгий стартап? 50 ms, 100 ms? Почему выбор данных из бд по одному пользователю и некая их обработка занимает много времени?
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892568
Фотография Renziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

>Нарушается один из основных принципов HTTP (без состояния)

Ссылаться на нерушимость основных принципов - признак мм... ну у нас такое на военной кафедре практиковалось.
Причем тут HTTP стейтлес? Silverlight, Mobile, Blazor applications используют HTTP тока держись, но хранят состояние лучше не придумаешь. HTTP тут не причем. А что причем, так это бизнес домен. И то, что пользователь платит за быстрое и респонсив приложение и ничего не знает про ваши основные принципы. Вот из этого мы и исходим в своей работе.

Сессию придется переделывать для InProc. Сериализация в строки просто убивает скорость.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892598
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
Ссылаться на нерушимость основных принципов - признак мм... ну у нас такое на военной кафедре практиковалось.


Нет никакой нерушимости, есть определённые знания, сформированные на основе опыта и исследований тысяч и миллионов людей. То, что вы клали на это и хотите самостоятельно наступить на известные грабли -- ваше право, ничего против не имею.

Renziglov
И то, что пользователь платит за быстрое и респонсив приложение и ничего не знает про ваши основные принципы. Вот из этого мы и исходим в своей работе.


Не имею желания вступать в очередную бессмысленную дискуссию про отношения к знаниям. Не хотите, ваше право, страдайте.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39892747
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Renziglov
пользователь платит за быстрое и респонсив приложение

Да, платит, исправно. Хорошие деньги. И получает быстрое приложение без всяких сессий


Хорошо бы Вы задачу таки озвучили, вместо полемики.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39893018
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну сессия точно перфоманса не даст. эт проверяется нагрузочными тестами легко
лучше опиши что ты хочешь получить, а не конкретную реализацию копать
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39893082
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
ну сессия точно перфоманса не даст. эт проверяется нагрузочными тестами легко
лучше опиши что ты хочешь получить, а не конкретную реализацию копать

Кстати да. InProc сессия может ещё и ухудшить производительность, потому как на неё блокировки будут накладываться.

Понимаю ещё, если её в Redis или Couchbase сохранять, а для сериализации использовать ProtoBuf.
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39894758
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Понимаю ещё, если её в Redis или Couchbase сохранять, а для сериализации использовать ProtoBuf.


ZeroFormatter ещё быстрей, а в коробке идёт IDistributedCache, и любой провайдер ходь в редиску, ходь в аэроспайк..
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39894859
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt

ZeroFormatter ещё быстрей, а в коробке идёт IDistributedCache, и любой провайдер ходь в редиску, ходь в аэроспайк..

ZeroFormatter в копилочку либ спс
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39894862
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
skyANA
Понимаю ещё, если её в Redis или Couchbase сохранять, а для сериализации использовать ProtoBuf.


ZeroFormatter ещё быстрей, а в коробке идёт IDistributedCache, и любой провайдер ходь в редиску, ходь в аэроспайк..

Только вот два года не обновлялся..
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39894929
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,

ну дак этож опен сорс, вот активный форк

https://github.com/GomPam/ZeroFormatter

:)
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39894932
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще автор просто зверь

https://github.com/neuecc

дофига проектов ведёт
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39895055
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну как оно с бореться с болью юнити https://medium.com/@neuecc/zero-overhead-async-await-for-unity-by-custom-async-statemachine-with-c-7-0-6808695733ba ну такое )

п.с. я тут в баре с джава прогерами в диспут вступил...оказывается в мире джавы async считают мифов вплане нахер юзать. мои доводы что тесты показываю более равномерную работу сервака и увеличение пропускной спобоности говорят криво смотрел)
...
Рейтинг: 0 / 0
ASP.NET MVC Core. Что с сессией?
    #39895059
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

мир джавы он такой
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC Core. Что с сессией?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]