2009-04-03 7 views
5

Ho un C# winapp che chiama un'app java da tcp e rimanda tutto a tcp al C#.WinApp in C# che chiama il programma java

Il motivo per cui sto usando java è perché ho ricevuto un'API java. Così ho scritto una piccola app java che chiama quell'API e ottiene tutti i dati di cui ho bisogno.

Quindi mi chiedevo se c'è un'altra soluzione per questo. Perché sta andando lentamente, specialmente con molti dati.

Grazie

risposta

5

TCP sulla macchina locale dovrebbero essere abbastanza veloce (named pipe potrebbe essere un po 'più veloce, ma può essere più difficile da fare su entrambi i lati).

Il collo di bottiglia più grande è probabilmente la serializzazione e la deserializzazione dei dati. Quale formato stai attualmente utilizzando per rappresentare i dati?

+0

Sto usando le stringhe per rappresentare i dati. Come csv io uso ";" per separare i dati. Forse non la soluzione migliore. – Gerbrand

+0

Beh, è ​​semplice, almeno. Esistono modi più esotici di serializzare che * potrebbe * essere più veloce (come "buffer di protocollo", che ha versioni java e C#), ma di solito non è banale da investigare. Qual è il * volume * di dati che stai inviando? –

+0

Sto inviando a Java un login e una password per l'API e il tipo di informazioni di cui ho bisogno. Java invia in alcuni casi circa 2000 record indietro. Questo dipende dal cliente per il quale ho bisogno delle informazioni. – Gerbrand

2

Mi sembra che tu debba profilare questo. Sei sicuro che l'aspetto della rete sia lento? Oppure la serializzazione/deserializzazione o l'effettiva elaborazione client/server oltre la trasmissione dei dati.

Prima di indirizzare le soluzioni di profilazione, è necessario identificare il particolare problema.

1

Hai ricevuto una java api e hai scritto una piccola java api ... quindi conosci java. Perché non scrivere anche il resto dell'applicazione in java?

A volte è più semplice riscrivere le parti "non compatibili" in base alla quantità di lavoro.

+0

Impossibile farlo perché il programma principale è scritto in C#. Questa parte viene aggiunta in uno stato di sviluppo successivo. – Gerbrand

0

Si consiglia di provare a utilizzare due buoni stack di servizi Web. Sarebbe molto interessante ascoltare i tuoi risultati. Sembra controintuitivo, ma questi stack sono ottimizzati anche se hanno l'onere di convertirsi in testo. Inoltre, non è molto lavoro prendere gli stack. Almeno è facile in C# per parallelizzare i servizi di chiamata web se questo è appropriato per la tua situazione.

0

Ho fatto un po 'di profilazione in Java e il metodo dell'API che ho ricevuto sta prendendo il massimo del tempo che ho notato. Se ricevo circa 1200 record, ho un tempo di attesa di 5 minuti. Una volta ricevuto in C#, sono necessari solo pochi secondi per aggiungerlo agli oggetti e mostrarmi una vista dei risultati.

Quindi penso che il problema non sia davvero alla mia fine o potrebbe essere meglio se usassi qualcosa come JNBridge o webservice?