BACKGROUND:Come implementare una mia creazione array di byte e lo smaltimento
In esecuzione mia app attraverso un profiler, sembra che i punti caldi sono tutti coinvolti nella assegnazione di un gran numero di temporanea new byte [] array.
In una sola esecuzione sotto CLR Profiler, alcuni brevi (3-5 secondi di tempo CPU al di fuori del profiler) hanno prodotto oltre un gigabyte di spazzatura, la maggior parte di tale allocazione di byte [], e questo ha attivato oltre 500 raccolte.
In alcuni casi, sembra che l'applicazione spenda al massimo del 10% del tempo di elaborazione della CPU.
Chiaramente una riscrittura è in ordine.
Quindi, sto pensando di sostituire le nuove allocazioni di byte [] con una classe di pool che potrebbe riutilizzare il buffer in un secondo momento.
qualcosa di simile ...
{
byte[] temp = Pool.AllocateBuffer(1024);
...
}
DOMANDA:
Come posso forzare l'applicazione per chiamare il codice nella routine di Pool.deAllocate (temp), quando non è più necessario Temp.
Nel frammento di codice precedente, quando temp è un buffer di byte [] del pool, ma quando viene eliminato, viene eliminato. Non è un problema reale, ma non viene riutilizzato dal pool.
So che potrei sostituire "ritorno 0;" con "Pool.deAllocate (temp); restituisce 0", ma sto cercando di forzare il ripristino a verificarsi.
È anche possibile da remoto?
Sono le allocazioni di array del proprio codice o sono causate dai metodi di .NET Framework? –
Assegnazioni del mio array di codice – Noah
+1 per la creazione di profili prima dell'ottimizzazione! :) – TrueWill