2010-05-12 37 views
6

Konsol uygulamasında barındırılan çok küçük bir wcf hizmetim var.WCF Service Memory Leaks

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    void DoService(); 
} 

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)] 
public class Service1 : IService1 
{ 
    public void DoService() 
    { 

    } 
} 

ve

using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client()) 
{ 
    client.DoService(new DoServiceRequest()); 
    client.Close(); 
} 

bu hizmet basicHttpBindings yayınlanmaktadır unutmayınız olarak varlık aradı. i 1000 döngüde istemci kodunun üzerinde yapıldığında Sorun

Şimdi ben "Tüm Öbek bayt" ve "özel bayt" performans sayaçları (i .net bellek profilcisini kullanılır) arasındaki büyük fark bulundu. Sorgulamadan sonra, nesnelerin bazılarının uygun şekilde atılmadığını buldum:

(bunların tümü için ad alanı System.ServiceModel'dir). Kanallar)

HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream 
BodyWriterMessage 
BufferedMessage 
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream 
HttpRequestContext.ListenerHttpContext 

Sorular Neden gönülsüz nesneler ve bunların nasıl kontrol etmek sürü var.

Arama başına yeni bir örneğini istemenizin

+1

Bana bir sistem kitaplığı sızıntısı gibi görünüyor. İstemci (kullanıcı yazılı servisinde olduğu gibi) kodu, bu arabelleklere ve akışlara dokunmaz ve WCF onları tasfiye etmiyor gibi görünür. –

+0

Mabushar: Bununla bir şansın oldu mu? Benzer bir sorun yaşıyorum. – bugfixr

+0

Bugfixr özür dilerim kardeşim Bugün mesajınızı farkettim, onlardan kurtulabildiğimi hatırlamıyorum ama hatırladığım tek şey çerçeve 3.5'den framework 4.0'a geçtim, kısmen veya tamamen yardımcı olmadı Unutma ama bir şekilde bana yardımcı oldu. geç cevap için özür dilerim. –

cevap