2009-04-03 17 views
5

Tengo un C# winapp que llama a una aplicación java por tcp y devuelve todo por tcp al C#.WinApp en C# programa java llamando

La razón por la que estoy usando Java es porque recibí una API de Java. Así que escribí una pequeña aplicación Java que llama a esa API y obtiene toda la información que necesito.

Así que me preguntaba si hay otra solución para esto. Porque va lento, especialmente con una gran cantidad de datos.

Gracias

Respuesta

5

TCP a través de la máquina local debe ser bastante rápida (canalizaciones con nombre podría ser un poco más rápido, pero pueden ser más difíciles de hacer en ambos extremos).

El mayor cuello de botella es la serialización y deserialización de los datos. ¿Qué formato estás usando actualmente para representar los datos?

+0

Estoy usando cadenas para representar los datos. Al igual que csv, uso ";" para separar los datos. Quizás no sea la mejor solución. – Gerbrand

+0

Bueno, es simple, al menos. Hay formas más exóticas de serializar que * puede * ser más rápido (como "búferes de protocolo", que tiene versiones de Java y C#), pero normalmente no sería trivial investigar. ¿Cuál es el * volumen * de datos que está enviando? –

+0

Estoy enviando a java un nombre de usuario y contraseña para la API y el tipo de información que necesito. El java está enviando en algunos casos alrededor de 2000 registros. Esto depende del cliente para el que necesito la información. – Gerbrand

2

Me parece que tiene que perfilar esto. ¿Estás seguro de que el aspecto de la red es lento? O la serialización/deserialización, o el procesamiento real del cliente/servidor más allá de la transmisión de datos.

Antes de abordar las soluciones de creación de perfiles, debe identificar el punto problemático en particular.

1

Has recibido una api de Java y has escrito una pequeña aplicación de Java ... para que conozcas a Java. ¿Por qué no escribir el resto de la aplicación en Java también?

A veces es más fácil reescribir las partes "no compatibles" que dependen de la cantidad de trabajo que es.

+0

No se puede hacer eso porque el programa principal está escrito C#. Esta parte se agrega en un estado posterior de desarrollo. – Gerbrand

0

Recomendaría intentar usar dos buenos stacks de servicios web. Sería muy interesante escuchar tus resultados. Suena contra-intuitivo, pero estas pilas se optimizan a pesar de que tienen la carga de convertir a texto. Además, no debería haber mucho trabajo para tomar las pilas. Al menos es fácil en C# para paralelizar los servicios web de llamadas si es apropiado para su situación.

0

Hice algunos perfiles en el Java y el método de la API que recibí me está tomando la mayor parte del tiempo que noté. Si recibo alrededor de los 1200 registros, tengo un tiempo de espera de 5 minutos. Una vez que lo recibo en C#, solo necesita unos segundos para agregarlo a los objetos y mostrarme una vista de los resultados.

Así que creo que el problema no está realmente en mi extremo o puede ser mejor si utilicé algo así como el JNBridge o servicio web?