Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Garbage Collector e classi
Forum - C# / VB.NET - Garbage Collector e classi - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 20:22
Domenica, 07/06/2009
non riusciamo a capirci; la versione classica di un server prevede un processo generale che a sua volta genera dei thread, uno per ogni client connesso; tu come lo hai fatto?

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 20:28
Domenica, 07/06/2009
si si è cosi allora avevi capito, bene. il fatto è che pero' nn sono thread veri e propri sono esecuzioni in background, pero' come thread piu o meno... ma piu leggeri... il fatto è che non capisco perche tutta questa ram.. supponendo che ogni classe user tutta piena occupi pochi kb... anche se ho 800 classi è impossibile che occupi 400 mb di ram... i conti non tornano....


Banda In Invio: 330.06 Kb/s
Banda Ricevuta: 9.55 Kb/s
Banda Totale Inviata: 12 GByte
Banda Totale Ricevuta: 18 MByte
ConnectToMe: 52763 (207/m)
Connessioni Accettate: 4129 (8/m)
Connessioni Rifiutate: 1558 (4/m)
GetNickList: 2294
Kick: 1
Messaggi in Main: 519
Messaggi in Privato: 181
MyINFO: 32000
Op Presenti: 13
RevConnectToMe: 27917 (109/m)
Ricerche Attive: 15328 (58/m)
Ricerche Passive: 19158 (61/m)
Thread: 25
Uptime: 00:06:31:01 [Total: 23461s]
User: 836
Memoria Totale: 1015 MByte
Memoria in Uso: 443 MByte
Memoria Disponibile: 191.7 MB
User Specification: 836 / 1000
Client ADC: 17
Stato Form: False
Sleep Time: 3000
Total CPU Usage: 37.5%

Ultima modifica effettuata da GoLDBeRG il 07/06/2009 alle 20:29
PM Quote
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 21:08
Domenica, 07/06/2009
per backround penso ti riferisca alla proprietà che si può impostare nei thread.

il fatto che i thread attivi siano 25 di fronte a centinaia di connessioni ricevute e servite indica che effettivamente i thread vengono distrutti quando non c'è ne più bisogno.

bisogna vedere però se questi thread vengono veramente distrutti e se viene quindi liberata la ram associata.

di che tipo sono l'array di thread? In che modo un thread attivo viene distrutto?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:15
Domenica, 07/06/2009
Testo quotato

Postato originariamente da GoLDBeRG:

si si è cosi allora avevi capito, bene. il fatto è che pero' nn sono thread veri e propri sono esecuzioni in background, pero' come thread piu o meno... ma piu leggeri...



Un thread e' un thread ... non ci sono varie "sfumature" ...

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 9:41
Lunedì, 08/06/2009
ora ho 190 utenti e occupa 18 mb di ram.... nn ci sto capendo niente.... ma decide lui quanta ne deve occupare o io??? sembra che si sta prendendo gioco di me...

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:19
Lunedì, 08/06/2009
Voglio sperare che decida lui ...

Tra le altre cose, bisogna capire se quello che tu vedi come "occupazione di RAM", lo sia in realta' o no.

Potrebbe essere solamente la dimensione del "working set" (della memoria reserved e non della committed). Lasciando stare la differenza tecnica (che ci porterebbe lontano), fai la prova di "minimizzare" il tuo programma (riducendolo ad icona) e controllare da Task Manager, la variazione di memoria "occupata". Torna a misurarla quando ripristini la finestra.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:11
Lunedì, 08/06/2009
Gli oggetti vengono passati comunque per riferimento anche quando c'è ByVal, quindi non è questo il problema. Chiamare Finalize è scorretto, tranne che in casi particolari: solo il GC lo può fare. Infatti, come dice msdn:
Testo quotato

Notes to Implementers:

Object.Finalize does nothing by default. It must be overridden by a derived class only if necessary, because reclamation during garbage collection tends to take much longer if a Finalize operation must be run.

If an Object holds references to any resources, Finalize must be overridden by a derived class in order to free these resources before the Object is discarded during garbage collection.


Richiamando Finalize non fai niente, così come non serve annullare i valori numerici e impostare le stringhe a "" (sarebbe meglio impostarle a Nothing). Per forzare una garbage collection, usa GC.Collect. Se vuoi evitarlo, richiama GC.AddMemoryPressure per indicare al runtime che c'è molta memoria in uso e deve essere frequentemente ripulita.

PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 16:12
Lunedì, 08/06/2009
nn sapevo dell'esistenza di questo metodo... pero' su msdn non riesco a capire in che modo possa essermi utile... potresti farmi un esempio?

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo