He sufrido una gran decepción y recibí una aplicación que, en determinadas situaciones, es al menos 100 veces más lenta, y tengo que comunicarla a nuestros clientes muy pronto (en cuestión de semanas).¿Alguna ganancia rápida para hacer que .NET remote más rápido en una sola máquina?
A través de un perfil muy simple, he descubierto que el cuello de botella es el uso de .NET Remoting para transferir datos entre un servicio de Windows y el front-end gráfico, ambos ejecutados en la misma máquina.
Microsoft guidelines dicen "Minimizar ida y vuelta y evitar las interfaces hablador": escribir
MyComponent.SaveCustomer("bob", "smith");
en lugar de
MyComponent.Firstname = "bob";
MyComponent.LastName = "smith";
MyComponent.SaveCustomer();
Creo que esta es la raíz del problema en nuestra aplicación. Lamentablemente, las llamadas a MyComponent. * (El generador de perfiles muestra que el 99,999% del tiempo se gasta en dichas declaraciones) se reparten libremente a lo largo del código fuente y no veo ninguna esperanza de rediseñar la interfaz de acuerdo con las directrices anteriores.
Editar: De hecho, la mayoría de las veces el front-end lee las propiedades de MyComponent en lugar de escribir en ellas. Pero sospecho que MyComponent puede cambiar en cualquier momento en el back-end.
Miré para ver si puedo leer todas las propiedades de MyComponent de una vez y luego ponerlas en caché localmente (ignorando el problema del cambio en cualquier momento anterior), pero eso implicaría alterar cientos de líneas de código.
Mi pregunta es: ¿Son algunas cosas 'de ganancia rápida' que puedo tratar de mejorar el rendimiento?
Necesito al menos una aceleración de 100 veces. Soy un programador C/C++/Delphi y estoy bastante, muy poco familiarizado con C# /. NET/Remoting que no sea lo que he leído en los últimos días. Estoy buscando cosas que se puedan completar en unos días: una reestructuración importante del código no es una opción.
Solo para empezar, ya he confirmado que está usando BinaryFormatter.
(Lo siento, esto es probablemente una pregunta terribles en la línea de '¿Cómo puedo factiblemente solución X si yo descarto todas las opciones viables' ... pero estoy desesperado!)
Editar 2 en respuesta al comentario de Richard a continuación: Creo que mi pregunta se reduce a:
- ¿hay alguna configuración que puede cambiar para reducir el costo de un .NET Remoting de ida y vuelta cuando ambos extremos de la conexión están en el misma máquina?
- ¿Hay alguna configuración que pueda cambiar para reducir el número de viajes de ida y vuelta, de modo que cada invocación de una propiedad de objeto remoto no dé lugar a un viaje de ida y vuelta por separado? Y podría esto romper algo?
Es probable que sus opciones sean limitadas, .NET Remoting está muy desaprobado (excepto para el dominio entre aplicaciones) debido a su falta de seguridad. – Richard
"Ganancia rápida" invariable significa "lento perder" en el imho, tenga mucho cuidado con esa frase. – annakata
Si se tratara de WCF, el ["transporte nulo"] (http://www.codeproject.com/KB/WCF/NullTransportForWCF.aspx) podría haber ayudado, pero ese es un modelo muy diferente al de la comunicación remota. –