У меня очень маленькая служба wcf, размещенная в консольном приложении.
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoService();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class Service1 : IService1
{
public void DoService()
{
}
}
и его называют
using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
{
client.DoService(new DoServiceRequest());
client.Close();
}
Пожалуйста, помните, что сервис публикуется на базовых httpBindings.
Задача
Теперь, когда я выполнил приведенный выше код клиента в цикле 1000, я обнаружил большую разницу между счетчиками производительности «Все байты кучи» и «Приватные байты» (я использовал .net memory profiler). После расследования я обнаружил, что некоторые объекты не были правильно утилизированы
Ниже приведен список этих объектов (найдено 1000 нераспределенных экземпляров -> равно числу вызовов клиента)
(пространство имен для всех них - System.ServiceModel.Channels)
HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream
BodyWriterMessage
BufferedMessage
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream
HttpRequestContext.ListenerHttpContext
Вопросы
Почему у нас много неразмещенных объектов и как ими управлять.
Пожалуйста, помогите