У меня есть очень маленький 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();
}
Помните, что сервис публикуется на basicHttpBindings.
Проблема
Теперь, когда я выполнил выше клиентского кода в цикле 1 000, я нашел большую разницу между "Всеми байтами "кучи"" и "Частными Байтами" счетчики производительности (я использовал профилировщика памяти .NET). После расследования я нашел, что некоторые объекты правильно не расположены, следующее является списком тех объектов (1 000 не склонных экземпляров были найдены->, равняется клиентским вызовам),
(пространством имен для всех них является Система. ServiceModel. Каналы)
HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream
BodyWriterMessage
BufferedMessage
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream
HttpRequestContext.ListenerHttpContext
Вопросы, Почему у нас есть партия не склонных объектов и как управлять ими.
Помогите
Вы запрашиваете новый экземпляр для каждого вызова (InstanceContextMode = InstanceContextMode.PerCall). Если сборщик мусора не выполняется в 1000 вызовах, то экземпляры службы не будут собраны. WCF требует, чтобы вы реализовали IDisposable
из MSDN: Откройте для себя мощные методы управления экземплярами для разработки приложений WCF
Per-Call Services Per-call Services Per-call Services - это режим создания экземпляров Windows Communication Foundation по умолчанию . Когда тип службы настроен для активации по отдельности, экземпляр службы, объект среды CLR, существует только во время выполнения клиентского вызова. Каждый клиентский запрос получает новый выделенный экземпляр службы. На рисунке 2 показано, как работает эта активация одним вызовом.
(источник: microsoft.com )