2009-04-27 16 views
20

qualcuno ha utilizzato una configurazione che consente garbage collection ottimizzato per macchine multi-processore utilizzando Aspnet.config con:
Experience utilizzando gcServer = "true" per impostare garbage collector per NET

<gcServer enabled="true"/> 
<gcConcurrent enabled="true"/> 

C'era un miglioramento nella performance del tuo sito?
Sono stati notati problemi?

+0

Vedere [qui] (https://stackoverflow.com/a/6251689/4140278) probabilmente si otterrà risposta –

risposta

19

Per prima cosa, Concurrent e Server si escludono a vicenda. Vedere this blog post per alcuni dettagli sui malintesi del GC del server. Tuttavia, ASP.NET, per impostazione predefinita, ospita il server GC (vedere Scott Hanselman's discussion), quindi non ci sarà alcuna differenza.

Si consiglia di attenersi al server anziché a un sito Web ASP.NET. Per un'applicazione in modalità utente, il GC concorrente è stato reattivo all'utente, poiché il server gc causerà "blocco".

Ho utilizzato il server GC e ho notato miglioramenti significativi in ​​determinate situazioni.

La modalità server GC aiuta le app degli utenti, tuttavia, se l'applicazione utente funziona con enormi pool di memoria e diventa molto frammentata.

+7

Questo sta cambiando in 4.5, che introduce ** GC concorrente del server **: http: // msdn. microsoft.com/en-us/library/ms229357.aspx – skolima

+0

@skolima Sì - di nuovo, però, lo si lascia "server" e automaticamente viene utilizzato il nuovo server concorrente GC –

2

In poche parole, la modalità GC Workstation migliora le prestazioni per un singolo utente, mentre la modalità GC del server è progettata per essere utilizzata su un programma che ha più richieste in ogni momento. Spero davvero che questa domanda non sia un sintomo di un problema molto più grande. a volte quando le persone iniziano a interrogare il garbage collector è perché non vedono l'impronta della memoria che si aspettavano. non aspettarti grandi guadagni con un garbage collector diverso. In quasi tutte le prove che ho fatto, ha fatto poca differenza quale collezionista stai usando.

2

(molto vecchia questione, lo so, ma ho pensato di aggiungere questo comunque)

C'è una grande differenza tra il server GC e GC Concurrent: GC server ha un thread per processore e sospende i fili su quel processore quando si esegue una raccolta, il thread Concurrent GC del server viene eseguito in parallelo con gli altri thread, ovvero senza sospensione. Vedi this MSDN article for more info e più sottili differenze.

A seconda del tempo che un ciclo richiede, questo può fare una differenza piuttosto grande nella reattività dell'utente dell'applicazione, quindi scegliere con saggezza. Nel caso di ASP.NET, che non ha un'interfaccia utente, GC server è l'opzione migliore (e predefinita).