Ho un servizio wcf molto piccolo ospitato in un'app console.Perdite di memoria del servizio WCF
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoService();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class Service1 : IService1
{
public void DoService()
{
}
}
e il suo essere chiamato come
using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
{
client.DoService(new DoServiceRequest());
client.Close();
}
Si ricorda che il servizio è pubblicato sul basicHttpBindings.
Problema
Ora, quando ho eseguito sopra il codice client in un ciclo di 1000 ho trovato grande differenza tra "Tutti i byte Heap" e contatori delle prestazioni "Byte privati" (io ho usato .net memoria profiler). Dopo l'indagine ho trovato che alcuni degli oggetti non sono disposti correttamente di seguito sono elencati gli oggetti (1000 istanza non trovata sono stati trovati -> è uguale alle chiamate client)
(lo spazio dei nomi per tutti è System.ServiceModel. canali)
HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream
BodyWriterMessage
BufferedMessage
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream
HttpRequestContext.ListenerHttpContext
Domande Perché dobbiamo sacco di oggetti undisposed e come controllarli.
si prega di aiuto
Sembra una perdita di libreria di sistema per me. Il codice client (come nel servizio scritto dall'utente) non tocca quei buffer e flussi e sembra che WCF non li stia eliminando. –
Mabushar: Hai avuto fortuna con questo? Mi sembra di avere un problema simile. – bugfixr
@bugfixr scusa fratello, ho notato il tuo messaggio oggi, non ricordo se sono riuscito a liberarmi di quelli, ma una cosa che ricordo è che ho spostato il framework 4.0 dal framework 3.5, mi ha aiutato parzialmente o completamente ricorda, ma mi ha aiutato in qualche modo. scusa per il ritardo nella risposta. –