Avatar billede Droa Seniormester
28. juni 2015 - 18:52 Der er 9 kommentarer og
1 løsning

Hvordan behandle man best hukommelser til asynkrone jobs

Hej Eksperter.

Jeg har snart arbejdet med C# i 6-7 år, dog er det meste selvlært, så jeg sidder tit med problemer man mulighvis lære og håndtere i lidt mere avanceret klasser.
Jeg sidder dog idag med en af de lette problemer, som virkeligt har været en af mine største problemer i snart 16år i hele min programmerings karriere, jeg har altid prøvet og undgå dette problem med en masse shady kode. så håber nogen kan hjælpe :)


Jeg sidder og er igang med og lave en ret så avanceret multisocket server, der køre på en masse forskellige tråede, som behandler forbindelser til klienter der skal logge på, og sende/modtage data over xmpp protokollen.

det betyder at folk skal kunne behandle opgaver til hver og samme klient på asykron vis (en klient kan bede og flere opgaver på samme tid, og få resultatet fra serveren individuelt).

ud over denne type opgaver, starter dethele selvfølgelig med at klienten starter sit handshake med logindata, som serveren validere.

Altsammen hukommelse som serveren skal holde styr på.

den måde jeg normalt holder styr på alle disse data, er og have en masse boolske værdi'er


isLoggedIn
hasAskedForAuth
hasAskedForUsername
hasAskedForPassword
hasAskedToBeCryptic
askedLoginDate
authedLoginDate
tasksIQ (array)
tasksCompleteIQ (array)
messagesPending (array)
...


også derudaf, det bliver dog hurtigt en masse uoverskuelige data, som i sidste ende kun bliver brugt een gang, og ikke behøver ligge og rode rundt i hukommelsen senere.

så jeg tænkte om der ikke var nogen gode artikler omkring denne type hukommelse, og hvordan man kunne optimere sin egen kode, når man har brug for at bruge dem?

på forhånd tak :)
Avatar billede arne_v Ekspert
28. juni 2015 - 19:28 #1
Du har disse felter i en data klasse og din client klasse (altsaa den klasse server side som repraesenterer en client) har en ref til en instans af denne data klasse. Naar client logger af eller timer ud saa dropper du ref til client instans og saa er instans af data klasse ikke laengere reachable og bliver GC'et.

Eller?
Avatar billede arne_v Ekspert
28. juni 2015 - 19:29 #2
Ioevrigt kan jeg ikke tro at de fylder meget.

Lad os sige 1000 bytes per client. Med 10000 clients er det 10 MB. Det er jo ingenting.
Avatar billede Droa Seniormester
28. juni 2015 - 20:53 #3
det er nogenlunde os sådan jeg køre mine data pt, da jeg tit sender min ClientMemory klasse med handlers og exceptions, så andet ville være umuligt.

Så det er helt i orden og bare lave en klasse med et par hunrede variabler til hukommelse?
Jeg syntes bare hurtigt det bliver uoverskueligt, men kan godt være jeg bare skal lære og lave en ordenligt UML diagram over mit design, istedet for at tilføje variabler løbende.
Avatar billede arne_v Ekspert
28. juni 2015 - 21:03 #4
Det er nok usaedvaneligt med 100 fields/properties i en flad struktur.

Men du kan vel gruppere i nogle under klasser og faa en pyramide struktur.
Avatar billede Droa Seniormester
29. juni 2015 - 01:04 #5
xmpp protokollen er os ret stor. især når man vælger de tunge extensions :)
Du har nok ret i jeg nok skal gøre hukommelsen mere modulær. også lave en sammehæng mellem hukommelse og moduler der er loaded ind i rutinen.

takker for hjælpen
Avatar billede arne_v Ekspert
29. juni 2015 - 01:48 #6
Har du overvejet at hente noget open source kode (f.eks. https://code.google.com/p/jabber-net/ ) og kigge lidt paa hvordan de struktuererer det?
Avatar billede Droa Seniormester
29. juni 2015 - 04:05 #7
jeg har overvejet det mange gange, men har kun kunne finde XMPP client source kode, desværre ingen XMPP server kode, det ser dog ud til jeg skulle have søgt på deres gamle navn for at finde noget brugbart.
mange tak for linket.
Avatar billede Droa Seniormester
29. juni 2015 - 08:54 #8
jeg brugte lige hele natten på at kigge kildekoden igennem, det ser ud til det kun er en klient-del, desværre.
Avatar billede Droa Seniormester
12. september 2015 - 19:52 #9
bliver der lagt et svar? :)
Avatar billede arne_v Ekspert
13. september 2015 - 02:10 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester