Gå til innhold

C#: ["LØST"]Nettverksproblem - stadig økende kernel CPU-bruk


Anbefalte innlegg

Hei!

 

Jeg har et plagsomt problem. Jeg har to programmer, master og slave, som kjører på to maskiner. Master mottar hvert sekund statusrapport fra slaven. Master kan sende kommandoer til slave, som slave skal behandle. Master blir etterhvert treig som sirup innen 30 minutt, men det kommer litt an på CPU-hastighet og antall kjerner. Dette på grunn av stadig økende kernel CPU-bruk. Hvis jeg kjører det lokalt (localhost eller mot egen IP) så merkes det ikke.

 

post-12102-1196845470_thumb.png

 

Vedlagt ligger en solution som er plukket ut fra prosjektet, som har ekvivalent nettverksfunksjonalitet.

 

Det fungerer omtrent slik...

 

Serber setter opp en TcpListener, som starter BeginAcceptTcpClient. Da kan vi starte en TcpClient med EndAcceptTcpClient. Ved hjelp av GetStream får jeg en NetworkStream som jeg bruker BeginRead på.

Master mottar da rapporter i callbacken onTextRead, vedlagt nedenfor.

 

private void onTextRead(IAsyncResult ar)
       {
           try
           {
               int iRx = 0;
               // Like this...
               //NetworkStream myStream =  (NetworkStream) ar.AsyncState;
               //iRx = myStream.EndRead(ar);
               // Or this?
               iRx = serverTextStream.EndRead(ar);

               statusMsg = System.Text.Encoding.Default.GetString(serverTextRcvBuffer, 0, iRx) + "\r\n";
               SetText("Recieved: " + statusMsg);

               parseStatusMsg(statusMsg);

               serverTextStream.BeginRead(serverTextRcvBuffer, 0, textWorker.ReceiveBufferSize, new AsyncCallback(onTextRead), serverTextStream);
           }
           catch (IOException ioe)
           {
               // What happened!
               // Link down?
               if (linkState == linkUP)
               {
                   linkState = linkDown;
                   //reStartComms();
               }
               SetText("IOException in onTextRead: " + ioe.Message + nl);
           }
           catch (ObjectDisposedException ode)
           {
               linkState = linkDown;
               SetText("ObjectDisposedException in onTextRead: " + ode.Message + nl);
           }
       }

 

Jeg har en mistanke om at det stadig blir opprettet nye objekter i forbindelse med alt dette, men jeg ser ikke helt hvor henne...

 

EDIT: Det var faktisk logboxen som gjorde det... mer og mer tekst i textboxen, som skal skrolles til slutten av teksten ved hver oppdatering...

NetworkTest.zip

Endret av Mr Burns
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...