Ich habe einen sehr kleinen WCF-Dienst in einer Konsolen-App gehostet.WCF Service Memory Lecks
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoService();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class Service1 : IService1
{
public void DoService()
{
}
}
und sein Wesen genannt als
using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
{
client.DoService(new DoServiceRequest());
client.Close();
}
Bitte denken Sie daran, dass Zustellungen an basicHttpBindings veröffentlicht wird.
Problem
Nun, wenn ich oben Client-Code in einer Schleife von 1000 durchgeführt, fand ich großen Unterschied zwischen "All Heap Bytes" und "Private Bytes" Leistungsindikatoren (i verwendet .net Speicher Profiler). Nach der Untersuchung fand ich einige der Objekte sind nicht richtig entsorgt folgende sind die Liste dieser Objekte (1000 undisposed Instanz wurden gefunden -> entspricht den Clientaufrufen)
(Namespace für alle von ihnen ist System.ServiceModel. Kanäle)
HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream
BodyWriterMessage
BufferedMessage
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream
HttpRequestContext.ListenerHttpContext
Fragen Warum tun wir viel undisposed Objekte haben und wie sie zu kontrollieren.
Bitte Hilfe
Sieht aus wie eine Systembibliothek Leck zu mir. Der Client-Code (wie im Code des Benutzers geschrieben) berührt diese Puffer und Streams nicht und sieht so aus, als ob WCF sie nicht entsorgt. –
Mabushar: Hattest du Glück dabei? Ich habe anscheinend ein ähnliches Problem. – bugfixr
@bugfixr Tut mir leid Bruder Ich habe Sie heute Nachricht bemerkt, ich erinnere mich nicht, wenn ich diese loswerden konnte, aber eine Sache, die ich erinnere, war, dass ich Framework 4.0 von Framework 3.5 verschoben, half es teilweise oder vollständig ich nicht Erinnere dich, aber es hat mir irgendwie geholfen. Entschuldigung für die späte Antwort. –