persistance
6 отговора
222 прегледа
persistance
asp.net
Ако инициализирам някакъв списък (ArrayList) на Page_Load, което отнема много време, на следващия post back този списък изчезва, и трябва да се ре-инициализира. Мога ли по някакъв начин да му кажа да не се губи, за да избегна повтарянето на бавната операция?
За момента виждам, че мога да го вкарам в cache - това ли е стандартния подход към проблема? Не ми харесва това, защото може да изчезне от кеша когато ресурсите започнат да свършват.
PS: ArrayList-а ми е деклариран като private поле на WebForm-ата.
-------------
Special killer double trouble triple extra nicotine monster!<P ID="edit">
Ако инициализирам някакъв списък (ArrayList) на Page_Load, което отнема много време, на следващия post back този списък изчезва, и трябва да се ре-инициализира. Мога ли по някакъв начин да му кажа да не се губи, за да избегна повтарянето на бавната операция?
За момента виждам, че мога да го вкарам в cache - това ли е стандартния подход към проблема? Не ми харесва това, защото може да изчезне от кеша когато ресурсите започнат да свършват.
PS: ArrayList-а ми е деклариран като private поле на WebForm-ата.
-------------
Special killer double trouble triple extra nicotine monster!<P ID="edit">
Редактирано от z_free на
Re: persistance
private ArrayList myArray
{
get{return (ArrayList)Session["myArray"];}
set{Session["myArray"]=value;}
}
Може и в ViewState-а да го пазиш
Earls of black, flying high
Coming through the darkened sky
{
get{return (ArrayList)Session["myArray"];}
set{Session["myArray"]=value;}
}
Може и в ViewState-а да го пазиш
Earls of black, flying high
Coming through the darkened sky
Редактирано от BlackEarl на
ахаа, 10q
Мерси много, открехна ме на новости :)
-------------
Special killer double trouble triple extra nicotine monster!
-------------
Special killer double trouble triple extra nicotine monster!
Re: persistance
Уффф, пак ли аз
Имаш няколко варианта:
1) ViewState. В никакъв случай не го препоръчвам. Всъщност тук-таме за малки обеми данни е безценно, но ако се прекали, става пълен кошмар. Щом инициализацията ти отнема прекалено много време, предполагам, че става въпрос за доста данни, така че това го изключвам.
2) Session. Тогава обаче (както се сещаш) всяка сесия ще има собствено копие на данните. В зависимост на натовареността на сървъра... кхъм, сещаш се
3) Application Cache. Най-оптимално, май.
4) Колкото и бавна да е инициализацията (освен ако не е обръщане към БД за извличане на 3 милиона записа един след друг), пак е за предпочитане пред всички предишни еквилибристики.
5) Помисли дали всички тези данни са ти необходими, как можеш да ги редуцираш, дали не е по-добре например в OnLoad да ги заредиш еднократно в XmlDocument и после да ги извличаш с XPath заявки (само идея, че сега съм на XML вълна
) и ей-такива работи.
но след безсънни дълги нощи станах силен и голям
и вече знам, че мога да се справя сам
Имаш няколко варианта:
1) ViewState. В никакъв случай не го препоръчвам. Всъщност тук-таме за малки обеми данни е безценно, но ако се прекали, става пълен кошмар. Щом инициализацията ти отнема прекалено много време, предполагам, че става въпрос за доста данни, така че това го изключвам.
2) Session. Тогава обаче (както се сещаш) всяка сесия ще има собствено копие на данните. В зависимост на натовареността на сървъра... кхъм, сещаш се
3) Application Cache. Най-оптимално, май.
4) Колкото и бавна да е инициализацията (освен ако не е обръщане към БД за извличане на 3 милиона записа един след друг), пак е за предпочитане пред всички предишни еквилибристики.
5) Помисли дали всички тези данни са ти необходими, как можеш да ги редуцираш, дали не е по-добре например в OnLoad да ги заредиш еднократно в XmlDocument и после да ги извличаш с XPath заявки (само идея, че сега съм на XML вълна
но след безсънни дълги нощи станах силен и голям
и вече знам, че мога да се справя сам
Re: persistance
Сесия, кеш, вюстейт или апликейшън. Ако е вюстейт отива при всеки клиента всеки път заедно с HTML-a и ако е примерно 100К става доста зле. Ако е в сесия, за всеки клиент се създава нова сесия с този обект, което е кофти ако обекта е един и същ.
Ако АррейЛиста ти е един и същ, без значение кой клиент се логва, моеш да ползваш апликейшън - тука има детайли.
[линк]
--
Sometimes the sole purpose of your life is to serve as a warning to others.
Ако АррейЛиста ти е един и същ, без значение кой клиент се логва, моеш да ползваш апликейшън - тука има детайли.
[линк]
--
Sometimes the sole purpose of your life is to serve as a warning to others.
Re: persistance
Става въпрос за списък с обекти, които са резултат от търсене на клиента. Ще идват от XML Web Service (данните ще са на DB) - уникални са за всеки клиент, и ми се струва, че сесията е нещото, което трябва да ползвам (ще проуча и XML варианта на Survivor).
PS: Още не съм започнал да го пиша, и се извинявам ако въпросите са rookie - ще гледам да не задавам тривиалности вече преди да съм си допрочел книгите
-------------
Special killer double trouble triple extra nicotine monster!
PS: Още не съм започнал да го пиша, и се извинявам ако въпросите са rookie - ще гледам да не задавам тривиалности вече преди да съм си допрочел книгите
-------------
Special killer double trouble triple extra nicotine monster!
Редактирано от z_free на
Re: persistance
Ами това ми прилича подходящо за Cache. Понеже не може да си сигурен, кога Кеша е експирясал, мое да направиш нещо подобно на това:
private ArrayList GetData()
{
if (Cache["CachedData"] != null)
{
return (ArrayList) Cache["CachedData"];
}
else
{
ArrayList dataList = WebService.GetData();
Cache["CachedData"] = dataList;
return dataList;
}
}
И после да си взимаш данните само с GetData() метода.
ЕДИТ: Упс, не видях че трябва да е уникален листа спрямо клиента. Ами, тогава моеш да сложиш някакво UniqueID на клиента като ID на Cache или да не ме слушаш какви глупости говоря :)
--
Sometimes the sole purpose of your life is to serve as a warning to others.
private ArrayList GetData()
{
if (Cache["CachedData"] != null)
{
return (ArrayList) Cache["CachedData"];
}
else
{
ArrayList dataList = WebService.GetData();
Cache["CachedData"] = dataList;
return dataList;
}
}
И после да си взимаш данните само с GetData() метода.
ЕДИТ: Упс, не видях че трябва да е уникален листа спрямо клиента. Ами, тогава моеш да сложиш някакво UniqueID на клиента като ID на Cache или да не ме слушаш какви глупости говоря :)
--
Sometimes the sole purpose of your life is to serve as a warning to others.
Редактирано от Гypy на