C # WCF - Cliente / Servidor - System.OutOfMemory Exception

El problema.Aplicación de cliente / servidor C # WCF que utiliza enlace TCP neto (patrón de editor / suscriptor).El lado del cliente sigue fallando con unOutOfMemoryException.Cuando ejecuto el Administrador de tareas junto con el cliente, puedo ver que la columna Uso de memoria aumenta hasta que la aplicación falla.La intención es que varias instancias del cliente se ejecuten en máquinas separadas.GuiónTengo una aplicación cliente / servidor.Patrón de diseño de editor / suscriptor.En el lado del servidor hay 6 diccionarios que forman un caché, cada uno con un objeto personalizado como valor.Cada conjunto de valores del diccionario se actualiza cada 5 segundos como parte de un ciclo while.Al final del ciclo de 5 segundos, los 6 diccionarios se agregan a un objeto de contrato de datos, cada uno como un miembro de datos diferente.El objeto del contrato de datos se envía por cable al cliente, donde hay 6 diccionarios más.Luego recorro cada diccionario de contrato de datos y agrego o actualizo el contenido de su equivalente del lado del cliente, dependiendo de si los valores ya existen o no.Resumen6 diccionarios del lado del servidor.6 diccionarios serializables en el contrato de datos.6 diccionarios enlazables del lado del cliente.WCF utilizando Net TCP Binding para transportar datos a través del cable.EspecificaciónC # .Net 3.5Del lado del cliente utilizando un formulario DevExpress y 9 vistas de cuadrícula DX y controles de pestañas.La mayoría de los objetos personalizados que contienen un diccionario de "sub activos". - He usado un diccionario enlazable para esta propiedad, que imagino crea una sobrecarga cuando tienes unos cientos de objetos (aunque no creo que usar un diccionario serializable en su lugar haga mucha diferencia, ya que ambos contienen el mismo código para la serialización) .

Los enlaces en ambos lados se crean mediante programación una vez al inicio y contienen la misma configuración (ver más abajo).

NetTcpBinding netTcpBinding = new NetTcpBinding(SecurityMode.None);

EndpointAddress endpointAddress = new EndpointAddress(EndpoindAddress);
InstanceContext context = new InstanceContext(callbackinstance);

netTcpBinding.MaxConnections = 5;
netTcpBinding.MaxBufferSize = 2147483647;
netTcpBinding.MaxBufferPoolSize = 2147483647;
netTcpBinding.MaxReceivedMessageSize = 2147483647;
netTcpBinding.ReceiveTimeout = TimeSpan.MaxValue;
netTcpBinding.CloseTimeout = TimeSpan.MaxValue;
netTcpBinding.TransferMode = TransferMode.Buffered;
netTcpBinding.ListenBacklog = 5;

DuplexChannelFactory<ISubscription> channelFactory =
   new DuplexChannelFactory<ISubscription>(
          new InstanceContext(this), 
          netTcpBinding,
          endpointAddress);

proxy = channelFactory.CreateChannel();
Mis preguntas¿Cómo puedo evitar que el uso de memoria del cliente crezca constantemente?¿El uso de memoria en el cliente sería significativamente menor si enviara solo Listas genéricas de objetos en lugar de diccionarios serializables?¿He configurado correctamente mis configuraciones de enlace para este tipo de implementación?Cualquier otra sugerencia para solucionar este problema de memoria sería muy apreciada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta