Académique Documents
Professionnel Documents
Culture Documents
c#SessovspadroSingletonStackOverflow
inscreverse
logem
turn
ajuda
xDispensar
JunteseComunidadedeestourode
pilha
Stack Overflow uma comunidade de 4,7 milhes
de programadores, assim como voc, ajudando uns
aos outros.
Juntese a eles leva apenas um minuto:
inscreverse
SessovspadroSingleton
Tenhoumaaplicaowebondeeugostariadepuxarasconfiguraesdousurioapartirdeumbancodedadosearmazenlosparaoacesso
global.FariamaissentidoparaarmazenarosdadosemumSingleton,ouumobjetodesesso?Qualadiferenaentreosdois?
melhorparaarmazenarosdadoscomoumarefernciadeobjetooudividiloemtipodevalorobjetos(intsecordas)?
Obrigado!
c# asp.net asp.netmvc designpatterns
perguntou12demaio'10s19:07
chobo
9658
23
87
157
5Respostas
Sesso.Issooquepara.Asessoarmazenadonocacheglobal(basicamenteum
singleton),fechadopelaIDdesesso.Dessaforma,vocobterapenasosdadosparaasesso
deinteresse.Usandoumsingletonseriabasicamentereplicandoocacheglobalevoctemque
reinventaromecanismopararecuperardadosparacadasessodeformaindependente.
Vemfrenteearmazenaroobjeto.DeixeapreocupaoSessosobreserializaoloaalgo
quepodeserrestaurado.Tenhacuidado,porm,comoquevoccolocarnaSesso.Vocno
querparaarmazenarmuitosdadoslouvocvaiusarumagrandequantidadedememria
(supondoqueumcachedememria).
respondeu12demaio'10em19:10
tvanfosson
351k
65
571
700
Seessasconfiguraesserousadasparatodososusuriosdosite,coloqueosemumanica
ouemcachedoaplicativo.Seelessoespecficosparacadausurio,coloclosemsesso.
UserefernciasdeobjetoaoadicionaraaplicaoousessodecacheAcreditoquetiposde
valorvaificarencaixotadoporissoelesseparecemcomobjetosparaocache.Sevocusarum
singleton,quepoderiairdequalquermaneira.
respondeu12demaio'10em19:10
Raio
16k
29
48
objetodesesso,definitivamente.
http://stackoverflow.com/questions/2821941/sessionvssingletonpattern
1/3
16/10/2016
c#SessovspadroSingletonStackOverflow
Singletonsexistiraonveldoprocesso.Istosignificaquesevoctem20usuriosqueacessam
seusiteaqualquermomento,elesestousandoomesmoobjetoSingleton.difcilse
acostumarcomesteconceito,sevocnoestfazendoodesenvolvimentowebmuito.
existemsessesnonveldousurio.Issosignificaquevocpodearmazenardadosporusurio,
enoporprocesso.
respondeu12demaio'10em19:11
Doug
3142
22
27
svezeseugostodomtodoabaixo.Elacuidadosproblemascomcordasmgicasevariveis
desessonodefinidas.Tambmcorreosingletonnonveldasesso,emvezdonvelde
aplicao.
publicstaticSessionHandlerGetInstance()
{
if(HttpContext.Current.Session["SessionHandler"]==null)
{
HttpContext.Current.Session["SessionHandler"]=newSessionHandler();
}
return(SessionHandler)HttpContext.Current.Session["SessionHandler"];
}
Emseguida,bastauslocomoumsolteironormal.Colocarnasvariveisquevocprecisa.
respondeu11demaroem18:14
user2245175
6
Istotomadodeumdocumentoantigo,masaindamuitovlidoefuncionaumtratamento...Eu
voucolocarocontedodelinksaqui,especialmenteporqueumlinkantigoquepode
desaparecer.Tomadodaqui.
fundo
OobjetodesessoemASP.Netpodeserusadoparaarmazenarinformaesqueespecfico
paraumusurioindividualdosite.Asessoindexadaporumnomedechave,equandoele
usadodirectamente,detalmodoquepodeconduziraumgrandenmerodenomesdesesso
individuais.Umaabordagemalternativaavezcriarumobjetosingletonparaagruparitens
relacionadoselojaqueobjetocomumdeterminadonomedachave.O"solteiro"umpadrode
designcomumqueespecificaaformadegarantirqueapenasumanicainstnciadeuma
classeexistenteaqualquermomento.
VantagensdesessoSingletonObjects
Agrupamentodeitensdesessoparafinsdeorganizao
Especialmentetilparaumasriedepginasdeumprocessotransitrio,comoregistroem
umsite.Umavezqueoprocessoestcompletooobjetopodeserapuradasapartirda
sessodemodoqueamemriapodeserrecuperada(melhorutilizaodosrecursosdo
servidor)
anlisedoimpactodasalteraessinformaesdesessomuitomaisfcil
Identificarasreasdositequeestofazendomauusodainformao(muitomaisclarado
queapenasusandoonomedavarivelparadeterminarseeleadequadoparaouso)
Intellisenseparanomesdepropriedadeetiposdeumavezacessaroobjeto
DesvantagensdesessoSingletonObjects
MaisdifcildeveronmerodeitensindividuaisemsessoresultadosASP.Netrastreamento
nomostraosvaloresdentrodadegradaododesempenhoobjetoaousarforado
armazenamentodeestadodesessodoprocesso(afetaserializao)
Implementao
Aprimeiraetapadeimplementaocriarumarquivodeclassequerepresentaoagrupamento
lgicodeitensquedevemserarmazenadosjuntosnonicoobjeto.Oquesesegueuma
classedeexemploquedemonstraatcnica:
publicclasssingleton
{
//NamethatwillbeusedaskeyforSessionobject
privateconststringSESSION_SINGLETON="SINGLETON";
//Variablestostorethedata(usedtobeindividual
//sessionkey/valuepairs)
stringlastName="";
stringfirstName="";
publicstringLastName
{
get
{
returnlastName;
http://stackoverflow.com/questions/2821941/sessionvssingletonpattern
2/3
16/10/2016
c#SessovspadroSingletonStackOverflow
}
set
{
lastName=value;
}
}
publicstringFirstName
{
get
{
returnfirstName;
}
set
{
firstName=value;
}
}
//Privateconstructorsocannotcreateaninstance
//withoutusingthecorrectmethod.Thisis
//thisiscriticaltoproperlyimplementing
//asasingletonobject,objectsofthis
//classcannotbecreatedfromoutsidethis
//class
privatesingleton()
{
}
//Createasastaticmethodsothiscanbecalledusing
//justtheclassname(noobjectinstanceisrequired).
//Itsimplifiesothercodebecauseitwillalwaysreturn
//thesingleinstanceofthisclass,eithernewlycreated
//orfromthesession
publicstaticsingletonGetCurrentSingleton()
{
singletonoSingleton;
if(null==System.Web.HttpContext.Current.Session[SESSION_SINGLETON])
{
//Nocurrentsessionobjectexists,useprivateconstructorto
//createaninstance,placeitintothesession
oSingleton=newsingleton();
System.Web.HttpContext.Current.Session[SESSION_SINGLETON]=oSingleton;
}
else
{
//Retrievethealreadyinstancethatwasalreadycreated
oSingleton=(singleton)System.Web.HttpContext.Current.Session[SESSION_SINGLETON];
}
//Returnthesingleinstanceofthisclassthatwasstoredinthesession
returnoSingleton;
}
}
Umapginaquequerusaresseobjetosimplesmentefazoseguinte:
singletonoSingleton=singleton.GetCurrentSingleton();
oSingleton.FirstName="Robert";
oSingleton.LastName="Boedigheimer";
Tipicamente,estatcnicavaiarmazenarmuitosmaisvariveisdeumadeterminadaclasseou
seroutilizadasparaumasriedepginasdawebquerealizarumprocesso.Outravantagem
deusarissoparaumprocessoemumwebsitequetodaamemrianecessriaparaas
variveisdesessopodemseresvaziados,simplesmenteremovendoarefernciaparaoobjeto
singleton.Aclassepodeimplementarummtodoqueosclientespodemusarparalimpara
referncia,elepodeserchamadoDispose()paraseguiropadrotpico.Netquandoumaclasse
forneceumamaneiradelimpeza:
publicstaticvoidDispose()
{
//CleanupthisobjectsothatGCcanreclaimspace
System.Web.HttpContext.Current.Session.Remove(SESSION_SINGLETON);
}
Concluso
HmuitasvantagensemusarobjetosSingletonarmazenadosnoobjetoSessionemvezdeusar
aschavesdesessoindividuaisparaarmazenarinformaes.tilparaobjetosqueso
destinadosaexistirportodaasesso(agruparitenslgicas,anlisedeimpacto,intellisense,
etc)eespecialmenteparaobjetosquesorealmenteapenasnecessriosparaumperodode
tempoemumsiteatqueousurioconcluiumdeterminadoprocesso(muitomaisfcilidentificar
mauusodevariveisedeconservarosrecursosquandooprocessoconcludo,masa
sessocontinuar).
respondeu20demaioem08:34
PaulZahra
5540
http://stackoverflow.com/questions/2821941/sessionvssingletonpattern
22
44
3/3